与关系的Django模型设计问题

时间:2018-07-11 12:19:49

标签: django django-models

我有一个问题,我无法决定如何设计以下方案的模型

  • 我想创建一个公司表,其中将包含公司列表。该表中将包含一个注释字段
  • 我希望该评论字段能够包含多个已过时的评论
  • 一个公司可以有多个评论,但一个评论只能属于一个公司

在这里评论表

class Comments(model.Models):
    date  = models.DateField(auto_now_add=True)
    comment_text = models.TextField(required=True)

如果我这样创建Companies表;

class Companies(models.Model):
    name = models.CharField(max_length=30)
    country = models.CharField(max_length=30)
    comment = models.ForeignKey(Comments, on_delete=models.SET_NULL, null=True)

然后我只能在“公司”表的特定行上附加一条评论

如果我这样创建Companies表;

class Companies(models.Model):
    name = models.CharField(max_length=30)
    country = models.CharField(max_length=30)
    comment = models.ManyToManyField(Comments)

然后,评论可以属于我不想要的多家公司。

在Django文档https://docs.djangoproject.com/en/2.0/topics/db/examples/中,只剩下一个选项,即一对一映射,这显然不是我想要的。

如何实现我想要的?

2 个答案:

答案 0 :(得分:0)

只需将ForeignKey放在Comment上,指向Company。这正是您想要的。

答案 1 :(得分:0)

您应该这样做。

class Company(models.Model):
    name = models.CharField(max_length=30)
    country = models.CharField(max_length=30)

class Comment(models.Model):
    company = models.ForeignKey(Company, related_name='comments', on_delete=models.CASCADE)
    date  = models.DateField(auto_now_add=True)
    comment_text = models.TextField()

访问某个公司的评论时,它将是

comments = company.comments.all()