2017-02-25 14 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内の関数があります「フォロー」ボタンをクリックします。

私の質問はどのように私の 'バック'モデルを構造化すべきですか?私はユーザーがこのプロジェクトをバックアップした金額、またはこの場合には「チーム」とそれが裏付けされた日付を保管する必要があります。私はちょうどユーザー以外の追加データを保存する必要がなかったので、 'フォロー'機能のモデルを作成することはそれほど難しくありませんでした。しかし、「BACK」機能では、「日付バックアップ」「金額バックアップ」のような追加データを保存する必要があります。あなたはあなたのケースではthrough

ManyToManyFieldを使用することができます

答えて

0

、それはこのようなものになるだろう:

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'"はよく知られているように、私はそれを使うことを考えなかった。 –

関連する問題