gpt4 book ai didi

python - 限制 Django 中内联表单集的外键查询集

转载 作者:太空狗 更新时间:2023-10-30 01:13:30 24 4
gpt4 key购买 nike

我已经构建了一个程序(使用 Django 1.9)来跟踪锦标赛。每场比赛都由一系列比赛组成,每场比赛都有两个人(参赛者)与之相关。

锦标赛有一个“combatant_pool”,其中包含所有战斗对象的子集。该界面目前允许我从“combatant_pool”中添加/删除战斗人员。

问题出在允许我记录比赛的屏幕上。我可以毫无问题地查看/添加/删除/修改回合,但输入回合的问题是允许我选择“combatant_1”和“combatant_2”的下拉列表允许我从数据库中的任何战斗员中选择,以及我需要的要列出“combatant_pool”中的战斗员。

我浏览了许多与此问题相关的其他论坛,但似乎没有一个能帮助我解决这个问题。

class combatant(models.Model):
first_name = models.CharField(max_length=100)

class tournament(models.Model):
combatant_pool = models.ManyToManyField(combatant, blank=True)

class bout(models.Model):
parent_tournament = models.ForeignKey(tournament, on_delete=models.CASCADE)
combatant_1 = models.ForeignKey(combatant, on_delete=models.CASCADE, related_name='combatant1')
combatant_2 = models.ForeignKey(combatant, on_delete=models.CASCADE, related_name='combatant2')
outcome = models.CharField(max_length=10)


def BoutsView(request, pk):
ThisTournament = tournament.objects.get(id=pk)

BoutInlineFormSet = inlineformset_factory(tournament, bout, fields=('combatant_1', 'outcome', 'combatant_2'), formset=BaseInlineFormSet)

if request.method == "POST":
formset = BoutInlineFormSet(request.POST, request.FILES, instance=ThisTournament)
if formset.is_valid():
formset.save()
# Do something.
return HttpResponseRedirect('/TournamentTracker/' + str(pk) + '/bouts')
else:
formset = BoutInlineFormSet(instance=ThisTournament)

return render(request, 'tournament_bouts_update_form.html', {'formset': formset, 'pk': pk})

最佳答案

啊,终于找到了一个可行的解决方案。

我只需要将这个方法添加到 View 中:

    def get_field_qs(field, **kwargs):
if field.name in ['combatant_1', 'combatant_2']:
return forms.ModelChoiceField(queryset=Tournament.objects.get(id=pk).combatant_pool)
return field.formfield(**kwargs)

然后添加参数

formfield_callback=get_field_qs

到 inlineformset_factory 调用。

关于python - 限制 Django 中内联表单集的外键查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com