Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 外部对象上的Django管理验证_Python_Django_Python 2.7_Django Admin - Fatal编程技术网

Python 外部对象上的Django管理验证

Python 外部对象上的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

我有一个团队模式和员工模式(与团队无关)。每个团队对象可以与1-10个Staff对象相关

每个staff对象都有一个布尔字段,用于指示他/她是否是团队协调员

在django admin页面中,我如何确保当管理员用户输入团队信息以及相关员工信息(内联)时,他/她必须至少选择一名团队协调员(团队中的所有员工都可以是协调员,但不能为零)

谢谢你的建议

models.py

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