Sto*_*oro 0 django many-to-many django-admin
我有以下内容:
class User(models.Model)
blablabla
class Product(models.Model)
authorized_users = models.ManyToManyField(
User,
related_name='shared_products',
)
Run Code Online (Sandbox Code Playgroud)
我已经将 的 管理员配置为Product显示authorized_users为水平过滤器,以便选择可以编辑产品的所有用户。
class ProductAdmin(admin.ModelAdmin):
filter_horizontal = (
'authorized_users',
)
admin.site.register(Product, ProductAdmin)
Run Code Online (Sandbox Code Playgroud)
问题是我想在 的 管理中执行相同的操作User,这意味着我想要 的 水平过滤器shared_products,以便选择该用户能够编辑的产品。我已经尝试过以下显然不起作用的方法:
class UserAdmin(admin.ModelAdmin):
filter_horizontal = (
'authorized_users',
)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
我发现的其他答案推荐使用内联,但正如我所见,它们用于编辑另一端的模型实例,这不是我想要做的。
有人知道如何实现这一目标吗?
class UserAdminForm(forms.ModelForm):
products = forms.ModelMultipleChoiceField(
queryset=Product.objects.all(),
required=False,
widget=FilteredSelectMultiple(
verbose_name=_('Products'),
is_stacked=False
)
)
class Meta:
model = User
def __init__(self, *args, **kwargs):
super(UserAdminForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
self.fields['products'].initial = self.instance.products.all()
def save(self, commit=True):
user = super(UserAdminForm, self).save(commit=False)
if commit:
user.save()
if user.pk:
user.products = self.cleaned_data['products']
self.save_m2m()
return user
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |