Limiting queryset for foreign key for inline formset in Django(Django中内联表单集的外键限制查询集)
本文介绍了Django中内联表单集的外键限制查询集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经构建了一个程序(使用Django 1.9)来跟踪锦标赛。每场锦标赛由一系列比赛组成,每一场比赛都有两个人(拳击手)与之关联。 锦标赛有一个"COMPARATANT_POOL",它包含所有参赛对象的子集。该界面当前允许我从‘STARATANT_POOL’中添加/删除战斗人员。
问题出在允许我记录比赛的屏幕上。我可以毫无问题地查看/添加/删除/修改回合,但输入回合的问题在于,允许我选择‘COMPATANT_1’和‘COMPATANT_2’的下拉列表允许我从数据库中的任何选手中进行选择,我需要的是只列出‘COMPATANT_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})
推荐答案
啊,终于找到了可行的解决方案。
我只需将此方法添加到视图:
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调用。
这篇关于Django中内联表单集的外键限制查询集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Django中内联表单集的外键限制查询集


猜你喜欢
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 沿轴计算直方图 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01