2017-02-25 124 views
0

我目前正在开发一个类似于kickstarter的CS项目,该项目用户可以支持他们的项目。 我已经有一个后续的功能,它允许用户按照自己喜欢的项目,该模型如下图所示:Django创建'后退'功能

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的功能,增加了用户对多对多场,如果用户点击“关注”按钮。

我的问题是我的'回'模型应该如何构造?我需要存储用户支持这个项目的金额,或者在这种情况下“团队”,以及他们支持的日期。为'后续'功能创建模型并不困难,因为我不需要存储除User之外的任何其他数据。但对于'返回'功能,我需要存储一些额外的数据,如'支持日期','金额支持'。

回答

0

您可以使用ManyToManyFieldthrough

在你的情况,这将是这样的:

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>]> 
+1

谢谢! “through ='Backer'”看起来很熟悉,我没有考虑使用它。 –