2016-02-21 7 views
6

'through'属性を持つManyToManyFieldsに役立つDjangoウィジェットの例がありますか?Django M2MFields 'through' widgets

from django.db import models 

    class Person(models.Model): 
     name = models.CharField(max_length=128) 

     def __str__(self):    # __unicode__ on Python 2 
      return self.name 

    class Group(models.Model): 
     name = models.CharField(max_length=128) 
     members = models.ManyToManyField(Person, through='Membership') 

     def __str__(self):    # __unicode__ on Python 2 
      return self.name 

    class Membership(models.Model): 
     person = models.ForeignKey(Person, on_delete=models.CASCADE) 
     group = models.ForeignKey(Group, on_delete=models.CASCADE) 
     date_joined = models.DateField() 
     invite_reason = models.CharField(max_length=64) 

Obvisously、スタンダールModelMultipleChoiceFieldが、ここでは動作しません:たとえば、私はこれらのモデルを持っている(Djangoのドキュメントからソースを得ました)。私は 'date_joined'と 'invite_reason'を追加する必要があります。これを達成する最も簡単な方法はどれですか?

+0

私が投稿した回答が満足できるものではない場合は、理由と理由を説明してください。ありがとう。 –

+0

@AntoinePinsardは解決策としてマークします。 – svfat

答えて

2

これは単純なウィジェットには少し複雑すぎます。私はそれがどのように見えるか想像もできません。そのためには、inline formsetsを使用する必要があります。

from django.forms import inlineformset_factory 

MembershipFormSet = inlineformset_factory(Group, Membership, fields=(
    'person', 'date_joined', 'invite_reason')) 
group = Group.objects.get(pk=group_id) 
formset = MembershipFormSet(instance=group) 

django.contrib.adminの中で、あなたがInlineModelAdminでインラインを使用することができます。

これは、このような何かを与える必要があります。