私はモデルを持っています
フー: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)
バー オブジェクト用の独自のユーザー管理サイトを作成しました。
admin.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 をバーに追加するためのカスタム フォームがあります。
フォーム.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 に追加されます)。ただし、2 人のユーザーが foo リストに追加しようとすると、2 番目のユーザーだけがその Foo をリストに保存します (Foo を追加すると、foo_list には追加された Foo のみが含まれます)。これが構造化されている方法に問題がありますか、または複数のユーザーが ManyToManyField に追加できるようにする方法はありますか?