Django管理后台可编辑的关联模型字段?

3 投票
1 回答
1221 浏览
提问于 2025-04-18 07:12

在阅读了Django管理网站的文档后,我还是不太明白如何在表单中直接添加相关模型的字段,同时遵循以下规则:

  • 不允许直接修改模型的源代码。只能通过猴子补丁(也就是临时修改)或子类化(创建一个新类来扩展原有类)来实现。
  • 需要在表单的现有字段之间插入,而不是在单独的内联管理模型中。
  • 字段需要是可编辑的,并且在保存表单时要更新相关模型的记录。

下面是一个简化的例子:

from django.db import models
from django import forms

class Order(models.Model):
    contact = models.ForeignKey(Contact, verbose_name=_('Contact'))
    bill_addressee = models.CharField(_("Addressee"), blank=True)

class Contact:
    email = models.EmailField(_("Email"), blank=True, max_length=75)

class OrderAdminForm(forms.ModelForm):
    fieldsets = (
        (_('Billing Address'), {'classes': ('collapse',), 'fields': (
           'organization_name', 'bill_addressee', 'bill_street1', 'bill_city',
           'email',) })
        #  ^^^^^^ <-- need related model field directly
        )

    class Meta:
        model = Order

对于只读字段,这个任务相对简单。只需定义一个方法来返回相关模型的字段,然后把它放到readonly_fields属性中。但是,编辑字段该怎么做呢?

1 个回答

-1

你只需要把 Contact.email 加到 'fields' 列表里就可以了:

'fields': ('organization_name', 'bill_addressee', 'Contact.email',)

撰写回答