【问题标题】:How do I Display Intermediary Fields for M2M Models in admin interface?如何在管理界面中显示 M2M 模型的中间字段?
【发布时间】:2011-10-28 21:37:51
【问题描述】:

我有以下 model.py 文件,其中 Charges 模型具有 M2M 田间农场和中间模型 Membership

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 模型“农场”M2mM 字段创建一个新对象时,我无法将费用分配给农场。我想知道为什么小部件没有显示以及如何显示我可以再次显示该小部件以供用户在创建费用时选择农场吗?

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

请帮忙 谢谢

【问题讨论】:

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


    【解决方案1】:

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

    class MembershipInlineAdmin(admin.TabularInline):
        class Meta:
            model = Membership
            extra = 1
    
    class ChargesAdmin(admin.ModelAdmin):
        inlines = [
            MembershipInlineAdmin,
        ]
    
    admin.site.register(Charges, ChargesAdmin)
    

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

    【讨论】:

    • 整个谷歌有很多不同的答案,这是正确的方法。
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2012-05-19
    • 2020-09-30
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2011-12-18
    相关资源
    最近更新 更多