Django M2MFields via widgets

Are there any examples of Django widgets that might be useful for ManyToManyFields with 'through' attributes? For example, I have these models (there is a source from the django documentation):

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) 

Obviously, the standard ModelMultipleChoiceField will not work here. I need to populate "date_joined" and "invite_reason" when adding. What is the easiest way to achieve this?

+6
source share
1 answer

This is too complicated for a simple widget. I can’t even imagine how it will look. For this purpose you will have to use the built-in formats .

This should give something like this:

 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) 

Inside django.contrib.admin you can use inline strings with InlineModelAdmin .

+2
source

All Articles