是否存在Django小部件的任何示例,这些示例对于具有'through'属性的ManyToManyFields有用吗?例如,我有这些模型(从Django文档中获取了源代码):

    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)

显然,标准的ModelMultipleChoiceField在这里不起作用。我需要在添加时填充“date_joined”和“invite_reason”。哪种方法最简单?

最佳答案

对于一个简单的小部件来说,这有点太复杂了。我什至无法想象它会是什么样子。为此,您将必须使用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一起使用。

09-04 00:48
查看更多