gpt4 book ai didi

python - 如何限制 Django CreateView 中 ForeignKey 字段的选择?

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:26 24 4
gpt4 key购买 nike

我有一个遵循这些思路的模型结构:

# models.py
class Foo(models.Model):
...

class Bar(models.Model):
foo = models.ForeignKey(Foo)
...

class Baz(models.Model):
bar = models.ForeignKey(Bar)
...

现在,在 Foo 实例的 DetailView 上,我有一个创建 Baz 的链接属于 Foo 实例的实例(通过其 Bar 实例之一)。该链接指向以下 CreateView:

class BazCreateView(CreateView):
model = Baz
fields = ['bar', ...]

由于要创建的 Baz 实例属于 foo 的 Bar 实例之一,我想将该字段的选择限制为属于 foo 的 Bar 实例。

到目前为止,我发现 ForeignKey.limit_choices_to 似乎用于模型和 This question这是 9 岁,因此可能有一个过时的答案。如果它没有过时,我想要一些关于如何访问接受的答案中提到的 form 对象以及如何将 Bar id 传递给 CreateView 的建议。

最佳答案

在查看@Alasdair 向我指出的问题(感谢提示)后,我想到了这个:

# forms.py
class BazForm(forms.ModelForm):
model = Baz
fields = ['bar', ...]

def __init__(self, *args, **kwargs):
foo_id = kwargs.pop('foo_id')
super(BazForm, self).__init__(*args, **kwargs)
self.fields['bar'].queryset = Bar.objects.filter(foo_id=foo_id)

# views.py
class BazCreateView(CreateView):
form_class = BazForm
model = Baz

def get_form_kwargs(self):
kwargs = super(BazCreateView, self).get_form_kwargs()
kwargs.update({'foo_id': self.kwargs.get('foo_id')})
return kwargs

这似乎行得通。如果我在这里做错了什么,请发表评论。

关于python - 如何限制 Django CreateView 中 ForeignKey 字段的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47182279/

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