如何在管理界面中显示M2M模型的中介字段?

时间:2011-08-17 12:32:25

标签: django django-models django-admin django-forms

我有以下model.py文件,其中Charges模型具有M2M字段农场,其中间模型成员资格

class Farm(models.Model):
    farmNo = models.CharField(max_length=100)
    size = models.CharField(max_length=50)
    description = models.TextField()

class Charges(models.Model):
    chargeDescription = models.TextField(verbose_name="Description")
    chargeType = models.CharField(max_length=10,choices=CHARGE_TYPE)
    farms = models.ManyToManyField(Farm,through='Membership')

    class Meta:
        verbose_name_plural = "Charges"

class Membership(models.Model):
    farm = models.ForeignKey(Farm)
    charges = models.ForeignKey(Charges)
    paymentDate = models.DateField()
    paymentStatus = models.BooleanField(default=False)

我的问题是,当我使用django管理应用程序为Charges模型创建一个新对象" farm" M2mM字段不会显示,并且我无法向农场分配费用。我想知道为什么小部件没有显示,我怎样才能再次显示该小部件供用户在创建费用时选择农场。

我尝试重写def formfield_for_manytomany(self, db_field, request=None, **kwargs):方法,导致小部件无法在屏幕上显示,但仍未显示在屏幕上。

请帮忙 感谢

1 个答案:

答案 0 :(得分:1)

它不会,因为它无法在不收集成员资格的其他数据的情况下添加农场。你必须使用内联,但即便如此,你必须内联成员资格,而不是农场。

class MembershipInlineAdmin(admin.TabularInline):
    class Meta:
        model = Membership
        extra = 1

class ChargesAdmin(admin.ModelAdmin):
    inlines = [
        MembershipInlineAdmin,
    ]

admin.site.register(Charges, ChargesAdmin)

然后,您可以在添加的每个成员资格上以正常方式选择现有服务器场或创建新服务器场。