模型中有很多外键,做模型的方法更好吗?

时间:2017-10-20 01:55:23

标签: django models

我是django的新手。在为我正在做的应用程序编写模型时,我觉得我做错了,因为我使用的所有外键都用于单个模型(票证模型具体)

我一开始的想法是,我希望每张故障单都能保留其创建者的信息,这张故障分配给哪个团队以及对故障单的评论。以及其他不需要外键的信息。我这样做了吗?我不知道为什么,但我觉得有更好的方法。

class Team(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=2000)
    members = models.ManyToManyField(User, through='Team_members')

    def __str__(self):
        return self.name



class Ticket(models.Model):
    name = models.CharField(max_length=200)
    creator = models.ForeignKey(User, on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    comments = models.ForeignKey(Comment, on_delete=models.CASCADE)
    #worker = models.ForeignKey(User, on_delete=models.CASCADE) *to be finished
    description = models.CharField(max_length=500)
    status = models.BooleanField(default=False)
    date_opened = models.DateTimeField('date opened')
    date_closed = models.DateTimeField('date closed',null=True, blank=True)
    def __str__(self):
        return self.name



class Team_member:
    team = models.ForeignKey(Team)
    user = models.ForeignKey(User)
    date = models.DateTimeField('date joined')

class Comment:
    text = models.CharField(max_length=2000)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    def __str__(self):
        return self.text

1 个答案:

答案 0 :(得分:1)

你的问题实际上与Django很少(比如,没什么?)。 请阅读database normalization,它应该回答您的问题。

关于你的模型,我注意到以下几点:

  • 你的模特看起来很不错。不要害怕外键,它们是你使用关系数据库的主要原因:)
  • 我认为,User可能是Team(服务?)的成员或打开机票的人。如果是这样的话:当您拥有worker外键时,您很可能在team模型中不需要Ticket。这将是多余的,因为workerTeam有关系。
  • 挑剔:Team_member不是pythonic,PEP8兼容版本为TeamMember