我目前正在开发一个类似于kickstarter的CS项目,用户可以支持他们的项目。 我已经有了一个跟随功能,允许用户关注他们喜欢的项目,模型如下所示:
class Team(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='team')
following = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='followers', blank=True)
如果用户点击“关注”按钮,我的view.py中就会有一个将用户添加到MANYTOMANY字段的功能。
我的问题是我的'后'模型应该如何构建?我需要存储用户支持此项目的金额,或者在这种情况下为“团队”,以及他们支持的日期。为“跟随”功能创建模型并不难,因为我不需要存储除User之外的任何其他数据。但对于'BACK'功能,我需要存储一些额外的数据,如'date backed','amount backed'。
答案 0 :(得分:0)
您可以ManyToManyField
使用through
在你的情况下,它会是这样的:
class Team(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='team')
following = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='followers', blank=True)
backers = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Backer', related_name='backers', blank=True)
class Backer(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
team = models.ForeignKey('Team', related_name='team')
amount = models.FloatField()
date_joined = models.DateField()
然后添加支持者:
backer = Backer(user=some_user, team=some_team, date_joined=date(2017, 02, 22), amount=200)
您可以通过ManyToManyField
SomeTeam.backers.all()
>>> <QuerySet [<User: Some User>]>