我正在Django中建立一个网站,该网站有两个应用程序和模型-maxes和training。我希望maxes表单能够查询锻炼模型以获取提升。
我可以通过添加它来使其工作:
def __str__(self):
return '%s' % (self.lift)
trainings / models.py
from django.db import models
from utils.models import (CreationModificationDateMixin)
# Create your models here.
class wplans(CreationModificationDateMixin):
wplan = models.CharField(max_length=50)
wnumber = models.IntegerField(default=0)
lift = models.CharField(max_length=30)
weight = models.IntegerField(default=0)
sets = models.IntegerField(default=0)
reps = models.IntegerField(default=0)
def __str__(self):
return '%s' % (self.lift)
```python
maxes/forms.py
```python
class maxesModelForm(forms.ModelForm):
lift = forms.ModelChoiceField(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)
它可以工作,但是我希望能够将wplan字段添加到表单中,但是现在wplan仍显示电梯名称。如果我取出
def __str__
,则显示wplanobject(1) 最佳答案
您可以通过子类化ModelChoiceField
[Django-doc]来自定义标签,并覆盖label_from_instance(..)
method [Django-doc]:
# app/fields.py
from django.forms.models import ModelChoiceField
class WpanModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return str(obj.lift)
然后,您可以在
MaxesModelForm
中使用:# app/forms.py
# ...
from app.fields import WpanModelChoiceField
class maxesModelForm(forms.ModelForm):
lift = WpanModelChoiceField(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)
我们还可以直接修补
ModelChoiceField
,例如:# 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)
关于python - 使用不显示object1的forms.ModelChoiceField查询选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56280947/