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

发布于 2024-11-30 12:52:09 字数 987 浏览 0 评论 0原文

我有以下 model.py 文件,其中费用模型具有带有中间模型会员资格的 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 管理应用程序为收费模型“农场”创建新对象时,M2mM 字段不会显示,这样我就无法将费用分配给农场。我想知道为什么小部件没有显示,我该如何再次显示显示该小部件,供用户在创建费用时选择农场。

我尝试重写 def formfield_for_manytomany(self, db_field, request=None, **kwargs): 方法,该方法导致小部件不显示在屏幕上,但仍然没有出现在屏幕上。

请帮忙 谢谢

I have following model.py file in which Charges model have M2M field farms with an intermediate model 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)

My problem is that when i create a new object using django admin app for Charges model "farms" M2mM field doesnot shows up and that way i cannot assign charges to farms.I am wondering why the widget is not showing up and how can I again show that widget for user to select farms while create a charge.

I tried overriding def formfield_for_manytomany(self, db_field, request=None, **kwargs): method which is causing widget not to show on screen but still its not appearing on screen.

Please help
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感性 2024-12-07 12:52:09

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

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

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

admin.site.register(Charges, ChargesAdmin)

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

It won't because it can't add a Farm without collecting the additional data on Membership. You have to use inlines, but even then, you have to inline Membership, not Farm.

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

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

admin.site.register(Charges, ChargesAdmin)

You can then select an existing Farm or create a new Farm in the normal way on each Membership you add.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文