由于默认的 django 管理组表单没有用于选择组中用户的字段。我写下了一些在网上添加所选用户字段的代码。一切正常。在我尝试保存创建的组表单之前,我收到此错误“组”对象没有属性“user_set”
class GroupAdminForm(forms.ModelForm):
class Meta:
model=group
exclude=[]
users=forms.ModelMultipleChoiceField(queryset=User,objects.all(),widget=FilteredSelectMultiple('users',False),required=False)
def __int__(self,*args,**kwargs):
super(GroupAdminForm,self).__int__(*args,**kwargs)
if self.instance.pk:
self.fields['users'].initial=self.instance.user_set.all()
def save_m2m(self):
self.instance.user_set.set(self.cleaned_data['users'])
def save(self,*args,*kwargs):
instance= super(GroupAdminForm,self).save()
self.save_m2m()
return instance
我收到此错误“Group”对象没有属性“user_set”。我不知道如何解决这个问题。请帮忙 。我是 django 中的海军。请帮助帮助
最佳答案
在遵循诸如 this one, covering how to add the ability to edit groups in the admin section 之类的答案后,我对此犯了个人错误。是因为我的 CustomUserAdmin(UserAdmin) 中有一个“add_form”引用了组管理表单。
为了扩展,我的原始代码如下所示:
class CustomUserAdmin(UserAdmin):
add_form = GroupAdmin # this right here was the culprit
model = CustomUser
ordering = ('date_published',)
...
我发现GroupAdmin
表单,它是:
class GroupAdmin(admin.ModelAdmin):
form = GroupAdminForm
def save_model(self, request, obj, form, change):
super(GroupAdmin, self).save_model(request, obj, form, change)
if 'users' in form.cleaned_data:
form.instance.user_set.set(form.cleaned_data['users'])
应该只附加到“组”模型,而不是用户模型。因此,我不断收到上述错误。
只需删除问题代码并遵循 Ekad 的“更新”答案即可解决我的问题。
对于像我这样的初学者,我可以通过在 Django 中设置断点来调试它,我发现 self.instance
是一个“{Group}”。那么,为什么我应该将与组相关的表单添加到我的扩展用户模型中呢?
这对于更有经验的开发人员来说当然是基础,但对我来说,很难捕获错误,从而产生了这个错误。
关于python - “组”对象没有属性 'user_set',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52575319/