如果有人可以在我的代码中验证多对多和多对一关系,我将非常感激:
项目:
1-有不同的“类别”(例如:'世界新闻''欧洲''商业''体育');这些“类别”将被预定义,并且应该更改一次(添加新/删除条目)
2-“news”与一个“类别”相关联。
3-“用户”可以根据需要注册到尽可能多的“类别”(目标是开发一个显示“新闻”的网站,该网站属于“用户”注册的“类别”。
4- A用户可以选择从他的“新闻源”中删除新闻。发生这种情况时,“丢弃的”布尔字段设置为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字段,我将非常感激。任何改进都将受到欢迎:)
答案 0 :(得分:1)
不,这不太对劲。问题出在discarded
属性上。如果我理解正确,News
对象是特定类别中的项目,因此它与特定用户无关。如果您在新闻对象上设置discarded
,则会为所有用户设置{。}}。
然而,如何对此进行建模并不完全明显,因为用户和新闻之间(正确)没有任何关系。在这两个表之间需要一些额外的ManyToMany,以保存丢弃的项目:
class User(models.Model):
...
discarded_items = models.ManyToManyField('News')
因此,要获取每个用户的当前新闻列表,您只需检查该项目是否在user.discarded_items
中。
答案 1 :(得分:0)
你写的内容非常好,它会起作用。但是,执行此类操作的最佳方法是定义我们的模型,例如(在您的情况下):
class UsersInCategories(models.Model):
user = models.ForeignKey(User)
category = models.ForeignKey(Category)
原因是您可能希望稍后添加一些其他数据,例如订阅的日期时间或其他内容。请注意,当您使用ManyToManyField时,django会在场景后面执行此操作(某些其他表应该出现在具有此类结构的数据库中,尽管我还没有测试它)。因此,如果您不需要其他数据,那就没关系。