2016-02-21 19 views
6

Esistono esempi di widget Django che possono essere utili per ManyToManyFields con attributi 'through'? Ad esempio, ho questi modelli (ottenuto la fonte dalla documentazione 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, standart ModelMultipleChoiceField non funziona qui. Devo popolare "date_joined" e "invite_reason" durante l'aggiunta. Qual è il modo più semplice per raggiungere questo obiettivo?

+0

Se la risposta che ho inviato non è soddisfacente, potresti spiegare perché e cosa ti aspetti? Grazie. –

+0

@AntoinePinsard contrassegnalo come soluzione. – svfat

risposta

2

Questo è un po 'troppo complesso per un semplice widget. Non riesco nemmeno a immaginare come sarebbe. Dovrai utilizzare inline formsets per questo scopo.

Questo dovrebbe dare qualcosa di simile:

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) 

All'interno django.contrib.admin, è possibile utilizzare inline con InlineModelAdmin.