2011-03-07 237 views
0

我真的很感激,如果有人可以驗證許多一對多在我的代碼和許多一對一的關係:許多一對多和多對一一個關係

項目:有不同的「類別」(例如:'world news''europe''business''sports');這些「類別」將被預定義並且應該改變很多次(添加新/刪除條目)

2-「新聞」與一個「類別」相關聯。

,因爲他想要的(其目標是開發顯示,在「類別」爲「用戶」註冊屬於「新聞」網站的3-「用戶」可以註冊爲許多「類別」。

4-用戶必須從他的「新聞源」。當這種情況發生時,「丟棄」布爾字段設置爲True(見「新聞」類)中刪除消息的選項。

class Category(models.Model): 
    category = models.CharField(max_length=50) 

class News(models.Model): 
    question = models.CharField(max_length=100) 
    pub_date = models.DateTimeField() 
    discarded = models.BooleanField() 
    category = models.ForeignKey(Category) 

class User(models.Model): 
    name = models.CharField(max_length=50) 
    subscribed_category = models.ManyToManyField(Category) 

問題:

我真的很感激它如果您可以驗證代碼中是否正確實現了foreignKey和manytomany字段。任何改善將超過歡迎:)

回答

1

不,這是不完全正確的。問題出在discarded屬性。如果我理解正確,News對象是特定類別中的項目,因此它與特定用戶沒有關係。如果您在News對象上設置了discarded,則它將被設置爲全部用戶。

但是,如何對此進行建模並不完全明顯,因爲用戶和新聞之間存在(正確)沒有關係。你需要像這兩個表之間的附加多對多,舉行丟棄的物品:

class User(models.Model): 
    ... 
    discarded_items = models.ManyToManyField('News') 

因此獲得的每個用戶的消息當前列表,你只需檢查項目不在user.discarded_items

0

你寫的是完美的,它會工作。但是,做這種事情的最好方法是定義我們的模型,例如(在你的情況下):

class UsersInCategories(models.Model): 
    user = models.ForeignKey(User) 
    category = models.ForeignKey(Category) 

的原因是因爲你可能想在以後添加一些額外的數據,像例如日期時間訂閱或其他東西。請注意,當你使用ManyToManyField時,django會在場景後面做這件事(一些額外的表應該出現在你的數據庫中,但是我沒有測試它)。所以如果你不需要額外的數據,那就沒關係。

+0

拋開拋棄的問題(由Daniel指出),你所暗示的是我從我的'用戶'類中刪除'subscribed_category = models.ManyToManyField(Category)',並且有一個額外的類'UsersInCategories'哪個用戶被註冊到哪個類別? - 只是要求澄清:) – 2011-03-07 23:16:28

+0

是的,這就是我要說的。當然,如果你需要它或將需要它。 – freakish 2011-03-08 23:20:57