在Django Admin中验证多个内联对象

在Django Admin中验证多个内联对象,django,django-admin,Django,Django Admin,我试图验证我的篮球联赛经理得到的数据,我得到了大多数简单的数据,但我不知道如何处理其中的一些数据 我有游戏模型和PlayerBoxscore模型,它通过ForeginKey链接到游戏中,该游戏中的每个玩家都有一个PlayerBoxscore,并拥有所有的统计信息,即is_starter和min。 我在Django Admin通过更改游戏时添加所有PlayerBoxScore。内联线,按团队分组 我如何确保一个团队中有五个PlayerBoxScore被设置为True? 和此类似——我如何确保一个团

我试图验证我的篮球联赛经理得到的数据,我得到了大多数简单的数据,但我不知道如何处理其中的一些数据

我有游戏模型和PlayerBoxscore模型,它通过ForeginKey链接到游戏中,该游戏中的每个玩家都有一个PlayerBoxscore,并拥有所有的统计信息,即is_starter和min。 我在Django Admin通过更改游戏时添加所有PlayerBoxScore。内联线,按团队分组

我如何确保一个团队中有五个PlayerBoxScore被设置为True? 和此类似——我如何确保一个团队中所有PlayerBoxScore得分的分钟数总和等于x

我不知道把验证放在哪里;它覆盖了所有链接到游戏的对象,所以我不能将它放在PlayerBoxscore清理方法中,也不能在保存所有内容时触发它,因为我想防止在不满足这些条件时保存它

提前谢谢

admin.py:


可以为inlineadmin类定义自定义表单集。该表单集上的干净方法将是该逻辑的适当位置

class AwayPlayerBoxscoresInline(admin.TabularInline):
    model = PlayerBoxscore
    verbose_name_plural = 'Away players'
    exclude = ['team']
    readonly_fields = ['player']
    extra = 0
    max_num = 0
    can_delete = False

    def get_queryset(self, request):
        # Returns only players from away team
        qs = super(AwayPlayerBoxscoresInline, self).get_queryset(request)

        if request.obj is not None:
            return qs.filter(player__team=request.obj.away_team)
        else:
            return qs

class HomePlayerBoxscoresInline(admin.TabularInline):
    model = PlayerBoxscore
    verbose_name_plural = 'Home players'
    exclude = ['team']
    readonly_fields = ['player']
    extra = 0
    max_num = 0
    can_delete = False

    def get_queryset(self, request):
        # Returns only players from home team
        qs = super(HomePlayerBoxscoresInline, self).get_queryset(request)

        if request.obj is not None:
            return qs.filter(player__team=request.obj.home_team)
        else:
            return qs


@admin.register(Game)
class GameAdmin(admin.ModelAdmin):
    view_on_site = True
    list_display = ('pk', 'away_team', 'home_team', 'score', 'winner', 'date', 'overtime')
    list_filter = ['away_team', 'home_team']
    fieldsets = [
        ('Game info', {'fields': ['away_team', 'home_team', 'date']})
    ]

    @staticmethod
    def score(obj):
        return '{away} - {home}'.format(away=obj.final_score['away_team'], home=obj.final_score['home_team'])

    def get_form(self, request, obj=None, **kwargs):
        request.obj = obj
        return super(GameAdmin, self).get_form(request, obj, **kwargs)

    def change_view(self, request, object_id, form_url='', extra_context=None):
        if self.get_object(request, object_id).date <= date.today():
            PeriodScoreInline.extra = 0
            self.inlines = [PeriodScoreInline, AwayPlayerBoxscoresInline, HomePlayerBoxscoresInline]
        else:
            self.inlines = []

        return super(GameAdmin, self).change_view(request, object_id, form_url, extra_context)