Django创建了一个“后退”功能

时间:2017-02-25 19:28:43

标签: python django

我目前正在开发一个类似于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'。

1 个答案:

答案 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>]>