具有关系的django模型的最佳模式

时间:2015-09-25 16:59:32

标签: django django-models django-views django-1.8

我有一个模型用户和一个模型团队。 我经常使用Team的所有字段和User的一个字段(用户名)但不总是!

一个团队包含许多用户,对于这些关系,我创建了这个模型(1):

class joinTeam(models.Model):
    username_user=models.CharField(max_length=30)
    team = models.ForeignKey(Projet, null=False)

但我犹豫是否要更换此字段' username_user'由此(2):

 class joinTeam(models.Model):
    username_user=models.ForeignKey(User, null=False)
    team = models.ForeignKey(Projet, null=False)

I'm afraid that this model (2) consumes more capacity the the first (1). 

如何使用简单的CharField或ForeignKey?

2 个答案:

答案 0 :(得分:0)

  

我担心这个型号(2)在第一次消耗更多的容量   (1)。

不要害怕,django只会将一个引用(指针/ id)存储给用户,而不是整个模型实例。

你的模型应该是这样的:

class joinTeam(models.Model):
    user=models.ForeignKey(User, null=False)
    team = models.ForeignKey(Projet, null=False)

username_user重命名为user

另外,最佳做法是尝试不重复数据,如果将username存储在joinTeam table中,则表示您正在复制数据,因为您可以从user table获取数据。

答案 1 :(得分:0)

首选使用样本2,使用foreingKeys。

  

最佳做法,将user_name_user重命名为user   默认情况下,null = False,但如果您愿意,可以显式

class joinTeam(models.Model):
    user = models.ForeignKey(User)
    team = models.ForeignKey(Projet)

在进行查询时,只需使用select_related,您就会在数据库中点击。

joinTeam.objects.all().select_related('user')