2014-06-24 104 views
2

我是Django的新手,我試圖創建一個簡單的應用程序!在Django中定義模型

我基本上想創建類似StackOverflow的東西,我有很多User和很多Question。我不知道我應該如何定義這兩個模型之間的關係。

我的要求:

  • 我希望每個Question有一個單一的作者User,以及隨之而來的QuestionUser列表。

  • 我希望每個User都有一個發佈的Question的列表以及其後的Question列表。

我幾乎失去了,我不知道如何定義我的關係。這是多對多的關係嗎?如果是這樣,我如何在我的User模型(發佈/關注)中獲得2個列表Question

請幫忙!

回答

3

要做到這一點,我建議打破每一個人的關係。你的人際關係似乎是:

  1. 創作

對於創作,細節是:

  • 每個課題由一個用戶撰寫
  • 每個用戶都可以創作很多問題

因此,這是兩者之間的一對多關係。做到這一點的最佳方式是從問題到用戶的外鍵,因爲只能有一個作者。

對於下面的細節是:

  • 每個問題可以有很多以下用戶
  • 可以爲每個用戶以下的許多問題

因此,這是一個多TO-很多關係。 Django中的多對多字段是這方面的完美人選。 Django會讓你通過另一個模型使用一個字段,但在這種情況下,這是不需要的,因爲你沒有其他信息與用戶關注問題(例如個人評分/排名)相關聯。

有了這兩種關係,Django會爲您創建相關項目列表,因此您不必擔心這一點。您可能需要爲此字段定義一個related_name,因爲有多個用戶與某個問題相關聯,並且默認情況下,django將爲兩個名稱爲user_set的相關設置。

+0

所以基本上,我會''問題'與外部鍵'用戶'和與用戶ManyToManyField? – user3772883

+0

@ user3772883是的,這也是我會推薦的。 – knbk

+0

類似這樣,在'Question'中: user = models.ForeignKey(User) userfollowed = models.ManyToManyField(User) – user3772883

1

一個非常基本的模式,讓您開始:

models.py

from django.db import models 
from django.contrib.auth.models import User 

class Question(models.Model): 
    question = models.CharField(max_length=200) 
    user = models.ForeignKey(User) 

    def __unicode__(self): 
     return self.question 

class Following(models.Model): 
    question = models.ForeignKey(Question) 
    user = models.ForeignKey(User) 
+0

我建議刪除'Following'模型,併爲'User'模型定義'ManyToManyField'。這允許使用許多便利方法,例如'Question.followers.add(user)'。您可以在文檔中的[多對多](https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/)主題中閱讀更多內容。 – knbk