簡體   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