Python 外部对象上的Django管理验证
我有一个团队模式和员工模式(与团队无关)。每个团队对象可以与1-10个Staff对象相关 每个staff对象都有一个布尔字段,用于指示他/她是否是团队协调员 在django admin页面中,我如何确保当管理员用户输入团队信息以及相关员工信息(内联)时,他/她必须至少选择一名团队协调员(团队中的所有员工都可以是协调员,但不能为零) 谢谢你的建议 models.pyPython 外部对象上的Django管理验证,python,django,python-2.7,django-admin,Python,Django,Python 2.7,Django Admin,我有一个团队模式和员工模式(与团队无关)。每个团队对象可以与1-10个Staff对象相关 每个staff对象都有一个布尔字段,用于指示他/她是否是团队协调员 在django admin页面中,我如何确保当管理员用户输入团队信息以及相关员工信息(内联)时,他/她必须至少选择一名团队协调员(团队中的所有员工都可以是协调员,但不能为零) 谢谢你的建议 models.py class Team(models.Model): team_id = models.AutoField(primary_key=T
class Team(models.Model):
team_id = models.AutoField(primary_key=True, verbose_name='Team ID')
team_name = models.CharField(max_length=100, verbose_name='Team Name')
def __str__(self):
return self.team_name
class Meta:
verbose_name='Team'
class Staff(models.Model):
staff_id = models.AutoField(primary_key=True)
team_id = models.ForeignKey(Team)
staff_name = models.CharField(max_length=100, verbose_name='Staff Name')
is_team_coord = models.BooleanField(verbose_name='Is Team Coordinator', default=False)
def __str__(self):
return self.staff_name
class Meta:
verbose_name='Staff'
管理员
class StaffInLine(admin.TabularInline):
model = Staff
def get_max_num(self, request, obj=None, **kwargs):
return 10
def get_min_num(self, request, obj=None, **kwargs):
return 1
class TeamAdmin(admin.ModelAdmin):
inlines = [StaffInLine]
class StaffInLine(admin.TabularInline):
model = Staff
formset = StaffInlineFormSet
def get_max_num(self, request, obj=None, **kwargs):
return 10
def get_min_num(self, request, obj=None, **kwargs):
return 1
我自己通过引用此链接找到了答案 完整的解决方案是: forms.py
class StaffInLineFormSet(forms.models.BaseInlineFormSet):
def clean(self):
count = 0
for form in self.forms:
try:
if form.cleaned_data.get('is_team_coord') is True:
count += 1
except AttributeError:
pass
if count == 0:
raise forms.ValidationError('You must choose at least one Team Coordinator')
管理员
class StaffInLine(admin.TabularInline):
model = Staff
def get_max_num(self, request, obj=None, **kwargs):
return 10
def get_min_num(self, request, obj=None, **kwargs):
return 1
class TeamAdmin(admin.ModelAdmin):
inlines = [StaffInLine]
class StaffInLine(admin.TabularInline):
model = Staff
formset = StaffInlineFormSet
def get_max_num(self, request, obj=None, **kwargs):
return 10
def get_min_num(self, request, obj=None, **kwargs):
return 1