python - Django 模型选择选项,填充了来自其他模型实例的字段

标签 python django-models django-forms foreign-keys

假设我有一个模型汽车,它有一个品牌字段和一个模型所有者,它有两个字段:name 和 car_brand,而后者应该是 Car 实例品牌之一。我需要一个表单,在该表单中向用户显示一个文本字段名称和一个下拉选择选项,其中填充了 Car 实例的所有品牌名称。我将如何实现这一目标?

这是我开始的代码。随时纠正。谢谢。

模型.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)

表单.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__ 方法,我认为它应该可以正常工作。正如 Daniel 所提到的,由于您覆盖了小部件,表单可能会变得困惑。我可能是错的,但我认为 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 模型相关的外键字段?这将是一种更规范化的数据建模方法。

关于python - Django 模型选择选项,填充了来自其他模型实例的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891648/

相关文章:

python - 将二进制字符串转换为 IEEE-754 单精度 - Python

python - 如何从python中的cmd输入中提取文件名

python - _tkinter.Tcl错误: invalid command name ".!treeview"

python - 如何使用 Hashlib 对二进制值执行 SHA-256?

python - 如何在模型中没有的 django 管理模型表单中包含文件字段

django - 使用 ModelForm 编辑模型实例会创建新实例而不是更新

jquery - 通过 jQuery 订购 django 更改列表页面?

django - grappelli隐藏内联可排序(Django Admin)中的可排序字段

database - Django 中唯一的 BooleanField 值?

python - 如何在 Django 1.6 中使用 ModelForms 避免 "record already exists"表单验证错误?