Dabei ist mir aufgefallen, das es z.Z. so aussieht:
Code: Alles auswählen
class PostTracking(models.Model):
user = AutoOneToOneField(User)
topics = JSONField(null=True, blank=True)
last_read = models.DateTimeField(null=True, blank=True)
Wenn man "Alle Beiträge als gelesen markieren" nutzt, wird der Zeitpunk "last_read" gesetzt und das "topics" gelöscht.
Um das JSONField geht es mir hier: Eigentlich wäre es ja ein ManyToManyField für diese Aufgabe da. Doch die Befürchtung ist, das man ein riesigen Datenhaufen ansammeln würde.
Das JSONField ist da nun auch nicht so dolle. Effektiver und schneller wäre IMHO so etwas (ungetestet):
Code: Alles auswählen
class IDsField(models.TextField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
if value:
value = [int(id) for in value.split(",")]
return value
def get_prep_value(self, value):
if isinstance(value, list):
value = ",".join(value)
return super(IDsField, self).get_prep_value(value)
Doch hat jemand Erfahrungen damit, wie M2M im Vergleich zu einer anderen Lösung steht?
Ich denke ja die Datenbank ist genau dafür gemacht, also macht M2M am meisten Sinn.
btw. von der Abfrage her, brauchen wir nicht unbedingt die Objekte. Also auf das ORM kann man hier verzichten. Eine Liste der IDs wird dann so weiter verarbeitet:
Code: Alles auswählen
topics = topics.exclude(id__in=topics_id)