2016-04-20 10 views
0

Ich habe eine Django App, wo Benutzer Kommentare für einander hinterlassen. Ich werde jetzt ein Foto-Feature hinzufügen. Ich brauche etwas Hilfe bei der Formulierung der Datenmodelle für diese Fotofunktion.Daten Modellierung Vorschläge für Django App

Unter dieser Funktion können Benutzer Fotos in einem gemeinsamen Bereich der Website hochladen, wo die genannten Fotos zuerst angezeigt werden. Das ist einfach genug, also lassen Sie uns jetzt zwei Komplikationen auf die Funktion hinzufügen:

1) Für jedes Foto Eintrag uploaders die Möglichkeit, einschließlich weitere Fotos haben (als Stream). Das erste Foto wird dann als Titelbild behandelt, das im gemeinsamen Bereich der Website angezeigt wird. Nach Durch Klicken auf diese Abdeckung wird der gesamte Stream sichtbar.

2) Für jeden Fotoeintrag kann jeder Betrachter mit einem Foto von seinem eigenen antworten. Wenn das passiert, werden die beiden Fotos zusammen als Stream, mit der Antwort als Cover-Foto behandelt, im gemeinsamen Bereich der Website erscheinen. Ein Klick auf dieses Titelbild zeigt nacheinander beide Einträge an und zeigt so den Benutzern was das Originalfoto war und was die Antwort darauf war.

Wie sollte ich die obigen Anforderungen modellieren? Ich kann meinen Kopf damit nicht umschließen. Etwas wie:

class PhotoReply(models.Model): 
    owner = models.ForeignKey(User) 
    which_photo = models.ForeignKey(Photo) 

class Photo(models.Model): 
    owner = models.ForeignKey(User) 
    is_stream = models.BooleanField(default=False) 
    image = models.ForeignKey(upload_to=upload_photo_to_location, storage=OverwriteStorage()) 
    upload_time = models.DateTimeField(db_index=True, auto_now_add=True) 
    stream_id = models.IntegerField(default=0) 
    is_reply = models.BooleanField(default=False) 
    reply = models.ForeignKey(PhotoReply, blank=True, null=True) 

Aber es gibt offensichtliche Schwäche, Inkonsistenzen in diesem. Bitte beraten.

Antwort

0

Habe ich Sie richtig verstanden, dass jedes Foto zu einem "Titelfoto" werden kann, sobald ein Nutzer mit einem anderen Foto darauf antwortet? Wenn das der Fall ist, dann müssen Sie nur die "Kinder", die ein Foto hat, im Auge behalten, um zu wissen, ob Sie es als "Cover" anzeigen wollen oder nicht.

class Photo(models.Model): 
    owner = models.ForeignKey(User) 
    parent = models.ForeignKey('self', db_index=True, null=True, default=None) 
    child_count = models.IntegerField(default=0, db_index=True) 
    image = models.ForeignKey(upload_to=loc) 
    upload_time = models.DateTimeField(db_index=True) 

So ein Foto, das > 0 Kinder hat, ist ein "Deckel". Und für jedes "Cover" Foto "x" müssen Sie nur nach allen Fotos suchen, die "x" als Eltern haben.

+0

Sieht ungefähr richtig aus. Ich werde es versuchen und zu dir zurückkommen. –