将自定义字段添加到Django admin

时间:2015-03-15 02:04:38

标签: python django django-admin

我已经用各种领域定义了我的模型。 其中一些是自定义字段,我用来验证信用卡数据,使用我的应用程序的fields.py文件。来源是here

class Transaction(models.Model):
    card_name = models.CharField()
    card_number = CreditCardField(required=True)
    security_code = VerificationValueField(required=True)
    expiry_date = ExpiryDateField(required=True)

我在forms.py文件中定义了一个ModelForm。

class TransactionForm(forms.ModelForm):
    class Meta:
        model = Transaction
        fields = "__all__"

我已将表单添加到我的admin.py文件中。

class TransactionAdmin(admin.ModelAdmin):
    form = TransactionForm

    def get_fieldsets(self, *args, **kwargs):
        return (
            (None, {
                'fields': ('card_name', 'card_number'),
            }),
        )
admin.site.register(Transaction, TransactionAdmin)

但是,自定义字段似乎不会显示在管理面板中。经过大量的研究,我找到了this,这似乎是解决方案,除了它不起作用。我尝试了各种各样的事情,包括添加一个带有缺失字段的字段元组以使其工作,但没有骰子。是的,我已经做了大量的搜索。

在最后一个链接中遵循解决方案时得到的错误是:

Unknown field(s) (card_number) specified for Transaction. Check fields/fieldsets/exclude attributes of class TransactionAdmin.

运行Django 1.7.4,Python 3。

1 个答案:

答案 0 :(得分:1)

像这样更改你的模特/管理员/表格

class Transaction(models.Model):
    card_name = models.CharField()
    card_number = models.CharField(max_length=40)
    expire_date = models.DateTimeField()
    card_code = models.CharField(max_length=10)

class TransactionForm(forms.ModelForm):
    card_number = CreditCardField(required=True)
    expiry_date = ExpiryDateField(required=True)
    card_code = VerificationValueField(required=True)
    class Meta:
        model = Transaction
        fields = "__all__"

class TransactionAdmin(admin.ModelAdmin):
    form = TransactionForm

admin.site.register(Transaction, TransactionAdmin)

<强>更新

CreditCardField是表单字段,而不是模型字段。在您发布的链接中查看其用法。

这些字段将以表格形式出现。