2011-03-07 115 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