Django 多对多和多对一关系

Django 多对多和多对一关系,django,data-modeling,Django,Data Modeling,如果有人能验证我代码中的多对多和多对一关系,我将不胜感激: 项目: 1-有不同的“类别”(例如:“世界新闻”“欧洲”“商业”“体育”);这些“类别”将是预定义的,并且一次应该更改很多(添加新条目/删除条目) 2.“新闻”与一个“类别”相关联 3-“用户”可以注册任意多个“类别”(目标是开发一个网站,显示属于“用户”注册的“类别”的“新闻”) 4-用户可以选择从其“新闻提要”中删除新闻。发生这种情况时,“丢弃的”布尔字段设置为True(请参阅“新闻”类) 问题: 如果您能验证代码中的foreign

如果有人能验证我代码中的多对多和多对一关系,我将不胜感激:

项目:

1-有不同的“类别”(例如:“世界新闻”“欧洲”“商业”“体育”);这些“类别”将是预定义的,并且一次应该更改很多(添加新条目/删除条目)

2.“新闻”与一个“类别”相关联

3-“用户”可以注册任意多个“类别”(目标是开发一个网站,显示属于“用户”注册的“类别”的“新闻”)

4-用户可以选择从其“新闻提要”中删除新闻。发生这种情况时,“丢弃的”布尔字段设置为True(请参阅“新闻”类)

问题:


如果您能验证代码中的foreignKey和许多字段是否正确实现,我将不胜感激。任何改进都是值得欢迎的:)

不,这不太正确。问题在于
丢弃的
属性。如果我理解正确的话,
News
对象是特定类别中的项目,因此它与特定用户没有关系。如果在News对象上设置了discarded
,则将为所有用户设置它

然而,如何对此进行建模并不完全清楚,因为(正确地)用户和新闻之间没有关系。您需要在这两个表之间增加一个ManyToMany这样的东西来保存丢弃的项目:

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

因此,要获取每个用户的当前新闻列表,您只需检查该项目是否不在
用户中。丢弃的\u项目

您所写的内容非常好,并且可以正常工作。然而,做这些事情的最好方法是定义我们的模型,例如(在您的情况下):


原因是您可能希望稍后添加一些附加数据,例如订阅的日期时间或其他数据。请注意,当您使用ManyToManyField时,django会在幕后执行此操作(数据库中应该会出现一些具有这种结构的附加表,尽管我还没有对其进行测试)。因此,如果您不需要额外的数据,那么也没关系。

抛开已放弃的问题(Daniel指出),您的建议是从我的“user”类中删除“subscribed_category=models.ManyToManyField(category)”,并使用一个额外的类“UsersInCategories”来标识哪个用户注册到哪个类别只是要求澄清:)是的,我就是这么说的。当然,如果你需要或将需要它。
class User(models.Model):
    ...
    discarded_items = models.ManyToManyField('News')
class UsersInCategories(models.Model):
    user = models.ForeignKey(User)
    category = models.ForeignKey(Category)