我正在Django中建立一个网站,该网站有两个应用程序和模型-maxes和training。我希望maxes表单能够查询锻炼模型以获取“举升”。
我可以通过添加它来使其工作:
def __str__(self):
return '%s' % (self.lift)
workouts / 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)
答案 0 :(得分: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)