gpt4 book ai didi

python - 使用不显示 object1 的 forms.ModelChoiceField 进行查询选择

转载 作者:行者123 更新时间:2023-12-01 07:50:04 25 4
gpt4 key购买 nike

我正在 Django 中构建一个网站,该网站有两个应用程序和模型——最大和锻炼。我希望 maxes 表单能够查询锻炼模型以获得 Lifts。

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

def __str__(self):
return '%s' % (self.lift)

锻炼/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 <b>label_from_instance</b>(self, obj):
return <b>str(obj.lift)</b>

在您的 MaxesModelForm 中,您可以使用:

# app/forms.py

# ...

from app.fields import <b>WpanModelChoiceField</b>

class maxesModelForm(forms.ModelForm):
lift = <b>WpanModelChoiceField</b>(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)

我们还可以直接修补ModelChoiceField,例如:

# app/forms.py

# ...

class maxesModelForm(forms.ModelForm):
lift = <b>ModelChoiceField</b>(
label=("Lift"),
queryset=wplans.objects.all(),
required=True
)
<b>lift.label_from_instance = lambda obj: str(obj.lift)</b>

关于python - 使用不显示 object1 的 forms.ModelChoiceField 进行查询选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56280947/

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