在Django Admin中验证多个内联对象
我试图验证我的篮球联赛经理得到的数据,我得到了大多数简单的数据,但我不知道如何处理其中的一些数据 我有游戏模型和PlayerBoxscore模型,它通过ForeginKey链接到游戏中,该游戏中的每个玩家都有一个PlayerBoxscore,并拥有所有的统计信息,即is_starter和min。 我在Django Admin通过更改游戏时添加所有PlayerBoxScore。内联线,按团队分组 我如何确保一个团队中有五个PlayerBoxScore被设置为True? 和此类似——我如何确保一个团队中所有PlayerBoxScore得分的分钟数总和等于x 我不知道把验证放在哪里;它覆盖了所有链接到游戏的对象,所以我不能将它放在PlayerBoxscore清理方法中,也不能在保存所有内容时触发它,因为我想防止在不满足这些条件时保存它 提前谢谢 admin.py:在Django Admin中验证多个内联对象,django,django-admin,Django,Django Admin,我试图验证我的篮球联赛经理得到的数据,我得到了大多数简单的数据,但我不知道如何处理其中的一些数据 我有游戏模型和PlayerBoxscore模型,它通过ForeginKey链接到游戏中,该游戏中的每个玩家都有一个PlayerBoxscore,并拥有所有的统计信息,即is_starter和min。 我在Django Admin通过更改游戏时添加所有PlayerBoxScore。内联线,按团队分组 我如何确保一个团队中有五个PlayerBoxScore被设置为True? 和此类似——我如何确保一个团
可以为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)