ManyToManyField提供额外信息

时间:2018-01-16 20:35:43

标签: django django-models

我正在django网站上工作,我需要存储一些关于用户的信息,例如isVerified BooleanField和ImageField中的个人资料图片以及存储用户给出的评分的评分elements。所以我做了一个这样的模型:

class UserProfile(AbstractBaseUser):
    is_verified = models.BooleanField(default=True)
    current_profile = models.ImageField(default=static('img/default_profile.jpg'))
    ratings     = models.ManyToManyField(Element, on_delete=models.CASCADE) 

但是我想更多地保存这些评级(例如时间戳和用户评分的实际值)

我是否需要为此制作一个单独的模型,还是可以更好地实现这一目标?

1 个答案:

答案 0 :(得分:1)

您需要使用可通过through关键字指定的中间表。

例如:

class UserProfile(AbstractBaseUser):
    is_verified = models.BooleanField(default=True)
    current_profile = models.ImageField(default=static('img/default_profile.jpg'))
    ratings = models.ManyToManyField(Element, on_delete=models.CASCADE, through='UserProfileElement')

class UserProfileElement(models.Model):
    user = models.ForeignKey(UserProfile, models.CASCADE, verbose_name=_('User'))
    element = models.ForeignKey(Element, models.CASCADE, verbose_name=_('Element'))
    timestamp = models.DateTimeField(_('Timestamp'), auto_now_add=True)
    rating = models.PositiveIntegerField(_('Rating'))

    class Meta:
        unique_together = ('user', 'element')

Django docs: ManyToManyField.through