2017-02-25 99 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'」看起來很熟悉,我沒有考慮使用它。 –