【问题标题】:Incorrect work redefined form in django adminsdjango 管理员中不正确的工作重新定义表单
【发布时间】:2018-09-28 09:10:27
【问题描述】:

我创建了自定义模型配置文件并将其链接到运行良好的用户模型。但是,现在我想在 Django admin 中创建自定义 UserCreateForm。我重新定义了它并添加了必要的字段,但之后仍然显示来自配置文件模型的所有字段,例如:电话、家庭地址。我需要在 UserCreateForm 中显示为:'first_name'、'last_name'、'username'、'password1'、'password2' 的字段。我做错了什么?

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm
from .models import Profile

class NewUserCreateForm(UserCreationForm):

   class Meta:
       fields = ('username', 'first_name', 'last_name',)

class ProfileInline(admin.TabularInline):
    model = Profile

class UserAdmin(UserAdmin):

   add_form = NewUserCreateForm

   add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('first_name', 'last_name', 'username','password1', 'password2', ),
       }),
       )
   inlines = [ProfileInline]

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

【问题讨论】:

  • 如果您想禁止某些字段显示,请尝试class UserAdmin(admin.ModelAdmin): readonly_fields=('first_name', 'last_name', 'username',)
  • 是否需要继承admin.ModelAdmin?我从 UserAdmin 继承并指示字段: readonly_fields 中的电话和 home_address 但它们仍然显示。这些字段我只需要在 UserCreateForm 中隐藏
  • 如果我参加了你们的节目,我会尝试在class Meta 中的表单中利用exclude。所以尝试更改您的代码exclude : ('phone', 'home_address' , )
  • 我在 Meta 类表单中添加排除 NewUserCreateForm: exclude = ('phone', 'home_address',) 并且仍然显示。如果我能提供帮助,我已经添加了模型 User with help OnetoOne
  • 在我的代码中,如果我使用这个 sn-p : class ProfileInline(admin.TabularInline): model = Profile readonly_fields = ('phone', 'home_address' ,) 它工作正常。你试过没有结果吗?

标签: django django-models django-forms


【解决方案1】:

首先您的models.py 文件将是:

from django.db import models

from django.contrib.auth.models import User

# Create your models here.

class Profile(models.Model):
    user_id = models.OneToOneField(User, on_delete=models.CASCADE) 
    phone = models.CharField(max_length=100)
    address = models.CharField(max_length=256)

...

然后是你的admin.py 文件。

from.models import Profile
# Register your models here.


class ProfileAdmin(admin.ModelAdmin):
    model = Profile
    exclude = ['phone',] # Or whatever you don't want to display.

admin.site.register(Profile, ProfileAdmin)

对于扩展实施,请根据您的需要添加或删除。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多