我正在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/

10-12 23:23