gpt4 book ai didi

python - Django - 如何在表单的查询集中使用 modelForm 的关联模型

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:44 25 4
gpt4 key购买 nike

如何访问 ModelForm 中关联的模型对象?像 self.Meta.model 之类的东西?我的模型和表单定义如下,我尝试通过“self.Meta.model.attribute”访问模型的属性,但这不起作用。

class Attribute(models.Model):
name = models.CharField(max_length=64)

class AttributeIndex(models.Model):
product = models.OneToOneField(Product)
attribute = models.ManyToManyField(Attribute)

class AttributeIndexForm(forms.ModelForm):
class Meta:
model = AttributeIndex
def __init__(self, *args, **kwargs):
super(AttributeIndexForm, self).__init__(*args, **kwargs)
self.fields['attribute'] = forms.ModelMultipleChoiceField(queryset=self.Meta.model.attribute.all, widget=widgets.FilteredSelectMultiple("Attributes", is_stacked=False))

最佳答案

当您声明模型时

class MyModel(models.Model):
class Meta:
something = 'foo'

或 ModelForm

class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel

有一个特殊的metaclass在“阅读”你的类定义后,其他,它将 Meta 属性设置/替换为 _meta

因此,为了访问 ModelForm 中的关联模型,请执行以下操作:

AttributeIndexForm._meta.model

但是在您只想自定义查询集的特定情况下您应该执行的 attribute 字段:

class AttributeIndexForm(forms.ModelForm):
class Meta:
model = AttributeIndex
def __init__(self, *args, **kwargs):
super(AttributeIndexForm, self).__init__(*args, **kwargs)
self.fields['attribute'].queryset = Attribute.objects.filter(..condition..)
self.fields['attribute'].widget = widgets.FilteredSelectMultiple("Attributes", is_stacked=False))

关于python - Django - 如何在表单的查询集中使用 modelForm 的关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13388897/

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