将自定义字段添加到 Django 管理

Adding custom fields to 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,这似乎是解决方案,但它不起作用。我已经尝试了各种各样的事情,包括添加一个带有缺失字段的字段元组来让它工作,但没有骰子。是的,我已经做了很多搜索。

我按照上一个link的解决方案得到的错误是:

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

运行 Django 1.7.4,Python 3.

像这样更改您的模型/管理/表单

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 是表单域,不是模型域。在您发布的 link 中查看它的用法。

这些字段将出现在表单中。