【问题标题】:Change Label Generic Inline Admin更改标签通用内联管理员
【发布时间】:2011-09-07 17:53:42
【问题描述】:

我在models.py中如下:

class Item(models.Model):
    date = models.DateField(_('date'), blank=True, null=True)
    description = models.CharField(_('description'), max_length=255)

    content_type = models.ForeignKey(ContentType, verbose_name=_('content type'))
    object_id = models.PositiveIntegerField(_('object id'), db_index=True)
    object = generic.GenericForeignKey('content_type', 'object_id')

class ItemAccountAmountRef(Item):
    """ Items of which a Quote or an Invoice exists. """
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    reference = models.CharField(max_length=200)
    debit_account = models.ForeignKey(Account, related_name='receivables_receipt_debit_account')
    credit_account = models.ForeignKey(Account, related_name='receivables_receipt_credit_account')

class PaymentItem(ItemAccountAmountRef):
    pass

class Payment(models.Model):
    invoice = models.ManyToManyField(Invoice, null=True, blank=True)
    date = models.DateField('date')
    attachments = generic.GenericRelation(Attachment)
    site = models.ForeignKey(Site, related_name='payment_site', null=True, blank=True
    items = generic.GenericRelation(PaymentItem)

在 admin.py 中:

class PaymentItemInline(generic.GenericTabularInline):
    model = PaymentItem
    form = PaymentItemForm

class PaymentAdmin(admin.ModelAdmin):
    inlines = [PaymentItemInline]

在forms.py中:

class PaymentItemForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(PaymentItemForm, self).__init__(*args, **kwargs)
        self.fields['credit_account'].label = "Bank Account"

在 PaymentItemInline 中,标签没有改变。我尝试过更改其他属性,例如工作的班级。如果我在调试模式下运行初始化,我可以看到标签变量正在更改,但是当呈现表单时,该字段仍被标记为信用帐户。有什么建议吗?

【问题讨论】:

  • 你清除浏览器缓存了吗?
  • 是的,我有,但遗憾的是它仍然给出了相同的结果。在另一个模型上,我现在尝试更改外键下拉列表的 onclick,但它似乎只能从第二个内联开始工作。我感觉这可能是 Django 问题,但我可能弄错了。现在看来我将不得不通过 javascript 进行这些更改,尽管这样做让我很痛苦。
  • 很可能不是“Django 问题”。从您在此处发布的代码中看不出错误在哪里,但我敢打赌,在开源、社区审查、彻底测试和大规模部署的 Django 源代码之前,它就是您的代码。只是说。

标签: django django-admin django-forms


【解决方案1】:

您已经完成了 98% 的工作。与其尝试使用__init__ 中的表单字段,不如在ModelForm 中重新定义它。如果您将其命名为相同的名称,django 将能够确定它应该验证并保存到 ForeignKey 字段。您可以使用相同的公式为 ModelForm 中的给定字段完全更改字段或小部件。

您可以在此处找到每种模型字段类型的默认表单字段类型:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#field-types

class PaymentItemForm(forms.ModelForm):
    credit_account = forms.ModelChoiceField(label="Bank Account", queryset=Account.objects.all())

就是这样。根本不需要重写任何函数:)

顺便说一下,this 字段的文档在这里:https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2014-09-07
    相关资源
    最近更新 更多