繁体   English   中英

Django模型选择选项,填充其他模型实例中的字段

[英]Django model select choice, populated with fields from other model instances

假设我有一个拥有现场品牌和型号所有者的型号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"}),
        }

您可以在Car模型上定义__unicode__方法,我认为它应该可以正常工作。 正如丹尼尔所说,由于你已经覆盖了小部件,因此表单可能会变得混乱。 我可能是错的,但我认为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模型相关的外键字段? 这将是一种更加规范化的数据建模方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM