假设我有一个型号Car,它有一个现场品牌和一个型号所有者,它有两个字段:name和car_brand,而后者应该是Car实体品牌之一。我需要一个表单,其中向用户显示文本字段名称和下拉选择选项,其中填充了Car实例的所有品牌名称。我怎么做到这一点?
这是我开始使用的代码。随意纠正。感谢。
models.py
from django.db import models
class Car(models.Model):
brand = models.CharField(max_length=20)
class Owner(models.Model):
name = models.CharField(max_length=20)
car_brand = models.ForeignKey(Car)
forms.py
from django.forms import ModelForm, TextInput, Select
from app.models import Owner
class OwnerForm(ModelForm):
class Meta():
model = Owner
fields = ("name", "car_brand")
widgets = {
"name" : TextInput(attrs={"class" : "name"}),
"car_brand" : Select(attrs={"class" : "car_brand"}),
}
答案 0 :(得分:2)
您可能只需在__unicode__
模型上定义Car
方法,我认为它应该可以正常工作。正如丹尼尔所说,由于你已经覆盖了小部件,因此表单可能会变得混乱。我可能是错的,但我认为django会自动在表单元素上呈现可用于样式目的的属性。也许你不需要覆盖小部件。如果没有,您可以明确指定表单字段:
class OwnerForm(ModelForm):
car_brand = forms.ModelChoiceField(
queryset=Car.objects.all(),
widget=Select(attrs={'class': 'car_brand'}),
)
class Meta:
model = Owner
fields = ('name', 'car_brand')
widgets = {
'name': TextInput(attrs={'class': 'name'})
}
作为旁注,您是否有任何理由没有CarBrand
模型和与Car
模型相关的外键字段?这将是一种更为标准化的数据建模方法。