0

当我想覆盖表单中的字段时遇到问题

该类如下所示

   class UserCreationForm(forms.ModelForm):
class Meta:
    model = User
    fields = ['password', 'services', 'project', 'email', 'name', 'first_name', 'role']

我想用另一个值修改“服务”字段。为此,我使用了 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

但是我仍然对所有服务获得相同的结果,而我只对获得一个项目的服务感兴趣。任何帮助将不胜感激。

谢谢

4

1 回答 1

2

您当前正在尝试设置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类已经使用了form = UserCreationForm,所以你所要做的就是删除该get_form方法。

class UserAdmin(admin.ModelAdmin):
    ...
    form = UserCreationForm
    ...
于 2017-11-07T11:29:48.470 回答