覆盖 Forms.modelAdmin 中的 django 表单
Overriding django form in Forms.modelAdmin
我想覆盖表单中的字段时遇到问题
class 如下所示
class UserCreationForm(forms.ModelForm):
class Meta:
model = User
fields = ['password', 'services', 'project', 'email', 'name', 'first_name', 'role']
我想用另一个值修改字段 'Services'。
为此,我使用了 get_form 函数,如下所示:
class UserAdmin(admin.ModelAdmin):
exclude = ('uuid',)
search_fields = ('email', "project")
list_display = ("email", "project", "nb_connexion")
form = UserCreationForm
def get_form(self, request, obj=None, **kwargs):
if obj != None:
print(obj.name)
print(request)
form = super(UserAdmin, self).get_form(request, obj=obj, **kwargs)
form.base_fields['services'].initial = Service.objects.filter(projects=obj.project)
return form
但是我仍然得到所有服务的相同结果,而我只对获得一个 project.Any 帮助的服务感兴趣。
谢谢
您目前正在尝试设置 initial
,这是所选的初始值。如果你想限制选择,你想改写 queryset
。
您可以在 __init__
方法中更改表单的字段:
class UserCreationForm(forms.ModelForm):
class Meta:
model = User
fields = ['password', 'services', 'project', 'email', 'name', 'first_name', 'role']
def __init__(self, *args, **kwargs):
super(UserCreationForm, self).__init__(*args, **kwargs)
if self.instance.pk:
self.fields['services'].queryset = Service.objects.filter(projects=self.instance.project)
您的 UserAdmin
class 已经使用了 form = UserCreationForm
,因此您只需删除 get_form
方法即可。
class UserAdmin(admin.ModelAdmin):
...
form = UserCreationForm
...
我想覆盖表单中的字段时遇到问题
class 如下所示
class UserCreationForm(forms.ModelForm):
class Meta:
model = User
fields = ['password', 'services', 'project', 'email', 'name', 'first_name', 'role']
我想用另一个值修改字段 'Services'。 为此,我使用了 get_form 函数,如下所示:
class UserAdmin(admin.ModelAdmin):
exclude = ('uuid',)
search_fields = ('email', "project")
list_display = ("email", "project", "nb_connexion")
form = UserCreationForm
def get_form(self, request, obj=None, **kwargs):
if obj != None:
print(obj.name)
print(request)
form = super(UserAdmin, self).get_form(request, obj=obj, **kwargs)
form.base_fields['services'].initial = Service.objects.filter(projects=obj.project)
return form
但是我仍然得到所有服务的相同结果,而我只对获得一个 project.Any 帮助的服务感兴趣。
谢谢
您目前正在尝试设置 initial
,这是所选的初始值。如果你想限制选择,你想改写 queryset
。
您可以在 __init__
方法中更改表单的字段:
class UserCreationForm(forms.ModelForm):
class Meta:
model = User
fields = ['password', 'services', 'project', 'email', 'name', 'first_name', 'role']
def __init__(self, *args, **kwargs):
super(UserCreationForm, self).__init__(*args, **kwargs)
if self.instance.pk:
self.fields['services'].queryset = Service.objects.filter(projects=self.instance.project)
您的 UserAdmin
class 已经使用了 form = UserCreationForm
,因此您只需删除 get_form
方法即可。
class UserAdmin(admin.ModelAdmin):
...
form = UserCreationForm
...