Python 使用forms.ModelChoiceField查询选项,该字段不';t show object1

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

我正在Django建立一个网站,它有两个应用程序和模型——maxes和workouts。我希望maxes表单能够查询训练模型以获得提升

我可以通过添加以下内容使其工作:

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)