Python 使用forms.ModelChoiceField查询选项,该字段不';t show object1
我正在Django建立一个网站,它有两个应用程序和模型——maxes和workouts。我希望maxes表单能够查询训练模型以获得提升 我可以通过添加以下内容使其工作:Python 使用forms.ModelChoiceField查询选项,该字段不';t show object1,python,django,Python,Django,我正在Django建立一个网站,它有两个应用程序和模型——maxes和workouts。我希望maxes表单能够查询训练模型以获得提升 我可以通过添加以下内容使其工作: def __str__(self): return '%s' % (self.lift) 训练/模型.py 来自django.db导入模型的 从utils.models导入(CreationModificationDateMixin) #在这里创建您的模型。 WPLAN类(CreationModificationDat
def __str__(self):
return '%s' % (self.lift)
训练/模型.py
来自django.db导入模型的
从utils.models导入(CreationModificationDateMixin)
#在这里创建您的模型。
WPLAN类(CreationModificationDateMixin):
wplan=models.CharField(最大长度=50)
wnumber=models.IntegerField(默认值=0)
升程=型号。CharField(最大长度=30)
权重=模型.IntegerField(默认值=0)
set=models.IntegerField(默认值=0)
reps=models.IntegerField(默认值=0)
定义(自我):
返回“%s%”(自提升)
```蟒蛇
maxes/forms.py
```蟒蛇
类maxesModelForm(forms.ModelForm):
lift=forms.ModelChoiceField(
标签=(“提升”),
queryset=wplan.objects.all(),
必需=真
)
它可以工作,但我希望能够将wplan字段添加到表单中,但它现在仍然在wplan中显示提升名称。如果我取出
def\uuu str\uu
它会显示wplan对象(1)您可以通过子类化来自定义标签,并覆盖:
我们还可以直接修补modelcooicefield
,如:
# app/forms.py
# ...
class maxesModelForm(forms.ModelForm):
lift = ModelChoiceField(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)
lift.label_from_instance = lambda obj: str(obj.lift)
#app/forms.py
# ...
类maxesModelForm(forms.ModelForm):
提升=型号选择字段(
标签=(“提升”),
queryset=wplan.objects.all(),
必需=真
)
lift.label\u from\u instance=lambda obj:str(obj.lift)
因此,如果我理解正确,您想更改对象的表示形式吗?用户仍然选择wplan
,但您希望将它们表示为lift
s?子类化工作正常!这是一种处理表单的非常巧妙的方法。谢谢你的帮助
# app/forms.py
# ...
from app.fields import WpanModelChoiceField
class maxesModelForm(forms.ModelForm):
lift = WpanModelChoiceField(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)
# app/forms.py
# ...
class maxesModelForm(forms.ModelForm):
lift = ModelChoiceField(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)
lift.label_from_instance = lambda obj: str(obj.lift)