2016-04-20 5 views
0

私はDjangoアプリを持っており、ユーザーはお互いにコメントを残しています。私は今写真の機能を追加しようとしています。私はこの写真の特徴のデータモデルを定式化する際に助けが必要です。Djangoアプリのデータモデリングの提案

この機能では、ユーザーはウェブサイトの共通領域に写真をアップロードすることができます。ここでは、その写真が最初に最後に表示されます。これは十分に簡単ですので、今度は機能への2つの合併症を追加してみましょう。

1)各写真のエントリについて、アップローダは 追加の写真(ストリームなど)を含むのオプションがあります。最初の写真は、 のカバー写真として扱われ、ウェブサイトの共通領域に表示されます。 このカバーをクリックすると、ストリーム全体が表示されます。

2)各フォトエントリについて、いずれの閲覧者も の写真をに返すことができます。その場合、2枚の写真は をストリームとしてまとめて返信をカバー写真として扱い、 にウェブサイトの共通部分として表示されます。このカバー写真をクリックすると の両方のエントリが順番に表示され、ユーザ の元の写真の内容とその返信内容が表示されます。

上記の要件をどのようにモデル化すればよいですか?私はこれの周りに私の頭を包んでいるように見えることはできません。次のようなものがあります。

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) 

しかし、明白な弱点、不一致があります。お知らせ下さい。

答えて

0

私は、あなたが別の写真で返信するとすぐに、すべての写真が「カバー写真」になることを正しく理解しましたか?そのような場合は、写真を「子供」と見なして、「カバー」として表示するかどうかを知る必要があります。

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) 

したがって、> 0の子供がいる写真は「カバー」です。それぞれの "カバー"写真 "x"については、 "x"を親として持つすべての写真を見るだけでいいです。

+0

右になります。私はそれを試して、あなたに戻ってくるつもりです。 –