【发布时间】:2018-11-29 05:17:03
【问题描述】:
参考Django - one-to-one modelAdmin,我仍在寻找解决 Django 管理界面和我的 OneToOne 关系问题的解决方案。
我有以下模型,它使用附加属性 is_thing_staff 扩展了标准用户模型:
class ThingStaff(models.Model):
""" Extends the django user model by a separate model relationship which holds additional user
attributes
"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
# by default a new user is not a staff member which take care of the thing administration
is_thing_staff = models.BooleanField(default=False)
def __str__(self):
return u"{}".format(self.user.username)
class Meta:
verbose_name = "Thing Staff"
verbose_name_plural = "Thing Staff"
如果我在 django 管理界面中创建一个新的 ThingStaff 对象,我可以选择所有用户,即使用户已经存在关系。保存与用户具有重复关联的新对象会导致错误,即已经存在与该用户关联的 ThingStaff 对象。到目前为止,这或多或少都可以。
但是,如果可能的选择会在下一步中导致错误,为什么还要显示它们呢?所以我通过
排除了他们from django import forms
from django.contrib import admin
from .models import ThingStaff
class ThingStaffForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ThingStaffForm, self).__init__(*args, **kwargs)
self.fields['user'].queryset = User.objects.exclude(
id__in=ThingStaff.objects.values_list('user_id', flat=True)
)
@admin.register(ThingStaff)
class ThingStaffAdmin(admin.ModelAdmin):
form = ThingStaffForm
到目前为止很好:在创建新的 ThingStaff 对象期间,已关联的用户不会显示在下拉列表中。
但如果我想更改现有关联,相关用户也不会出现在下拉列表中,这使得无法重置 is_thing_staff 标志。
所以我的问题是:如何在 django 管理界面中为更改视图再次启用此特定用户?
【问题讨论】:
标签: python django django-forms django-admin