我有模型
富:models.py
name = models.CharField(max_length=100)
user = models.ForeignKey(User)
栏:models.py
owner = models.ForeignKey(User)
user_list = models.ManyToManyField(User, related_name='user_list')
foo_list = models.ManyToManyField(Foo)
我为 bar 对象创建了自己的用户管理站点。
管理员.py
class BarAdmin(admin.ModelAdmin):
model = Bar
form = BarForm
def __init__(self, model, user_admin_site):
self.form.user_admin_site = user_admin_site
super(BarAdmin, self).__init__(model, user_admin_site)
def get_form(self, request, obj=None, **kwargs):
form = super(BarAdmin, self).get_form(request, obj, **kwargs)
form.current_user = request.user
return form
def save_model(self, request, obj, form, change):
if change:
pass
else:
obj.owner = request.user
obj.save()
user_admin_site = UserAdmin(name='usersadmin')
user_admin_site.register(Foo)
user_admin_site.register(Bar, BarAdmin)
我有一个自定义表单可以将 Foos 添加到 Bar。
表格.py
class BarForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BarForm, self).__init__(*args, **kwargs)
self.fields['foo_list'] = forms.ModelMultipleChoiceField(queryset=Foo.objects.filter(user=self.current_user))
rel = ManyToOneRel(Foo, 'id')
self.fields['foo_list'].widget = RelatedFieldWidgetWrapper(self.fields['foo_list'].widget, rel, self.user_admin_site)
class Meta:
model = Bar
exclude = ['owner']
用户只能查看和编辑他们在用户列表中的栏。当我从默认管理站点将 Foos 作为管理员添加到 Bar 时,一切正常(添加 Foo 会将另一个 Foo 放入 foo_list)。但是,如果两个用户尝试添加到 foo 列表中,则只有第二个用户会将他们的 Foo(s) 保存到列表中(添加 Foo(s) 会使 foo_list 仅包含添加的 Foo(s))。它的结构是否有问题,或者有没有办法让多个用户可以添加到 ManyToManyField?