【问题标题】:Override a form in Django admin在 Django admin 中覆盖表单
【发布时间】:2012-04-19 21:24:22
【问题描述】:

在 Django 管理中,我想为模型(例如发票模型)覆盖并实现我自己的表单。

我希望发票表单具有客户名称、产品名称的自动填写字段,并且我还希望进行自定义验证(例如客户的信用额度)。如何覆盖 Django 管理员提供的默认表单并实现我自己的?

我是 Django 新手,感谢任何指点。

【问题讨论】:

    标签: python django django-models django-admin django-views


    【解决方案1】:

    您可以通过将 ModelAdmin 的表单属性设置为您自己的表单类来覆盖 django 内置管理员的表单。见:

    1. https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form
    2. https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin

    也可以覆盖表单模板 - 查看https://docs.djangoproject.com/en/dev/ref/contrib/admin/#custom-template-options

    如果您专门寻找自动完成功能,我可以推荐 https://github.com/crucialfelix/django-ajax-selects

    【讨论】:

    • 是否也可以覆盖表单的外观?具有选定字段的自动完成功能。
    • 如果你正在寻找管理员自动完成,我没有使用 django-ajax-selects,但django-autocomplete-light 绝对值得 :)
    【解决方案2】:

    如何根据docs覆盖django admin中的表单:

    from django import forms
    from django.contrib import admin
    from myapp.models import Person
    
    class PersonForm(forms.ModelForm):
    
        class Meta:
            model = Person
            exclude = ['name']
    
    class PersonAdmin(admin.ModelAdmin):
        exclude = ['age']
        form = PersonForm
    

    【讨论】:

    • 我把这段代码放在models.py还是admin.py中。另外,Person 应用程序在哪里是指我创建的应用程序?
    • @KehlinSwain:人就是模型。此代码可以存在于 admin.py 中,也可以存在于您从 admin.py 导入的外部 form.py 中。
    • @AlMahdi 如果add_formadmin.ModelAdmin 类中的一个方法,那么我不明白为什么不这样做。
    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 2017-05-26
    • 2017-08-23
    • 1970-01-01
    • 2019-08-15
    • 2017-10-14
    • 2016-09-16
    • 1970-01-01
    相关资源
    最近更新 更多