天天看點

Django forms元件裡的ChoiceField、ModelChoiceField和ModelMutipleChoiceField的差別閱讀簡要

閱讀簡要

首先我們要明白Django forms元件裡的ChoiceField、ModelChoiceField和ModelMutipleChoiceField是繼承關系      

ChoiceField

1. Django forms元件中ChoiceField字段是對models裡choice的渲染

2. choices作用:在資料庫中用元組的第一項作為存儲的值,在顯示時,将元組的第二項作為顯示的内容,便于前端使用下拉框

3. 用get_xxxx_display()顯示第二項的值      
class Authors(models.Model):
    name = models.CharField("姓名", max_length=32)
    gender = models.SmallIntegerField(choices=((1, "男"), (2, "女")), default=1)      

ModelChoiceField

1. Django forms元件中ModelChoiceField字段是對models裡Forekey的渲染

2. 在前端渲染為下拉菜單      
class Book(models.Model):
    title = models.CharField("書名", max_length=32)
    publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE, verbose_name="出版社")      

ModelMutipleChoiceField

1. Django forms元件中ModelMutipleChoiceField字段是對models裡ManyToManyField的渲染      
2. 在前端渲染為多選菜單      

models.py

class Authors(models.Model):
    name = models.CharField("姓名", max_length=32)
    age = models.IntegerField("年齡")
    gender = models.SmallIntegerField(choices=((1, "男"), (2, "女")), default=1)

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField("書名", max_length=32)
    publish_time = models.DateField()
    publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE, verbose_name="出版社")
    authors = models.ManyToManyField(to="Authors")

    def __str__(self):
        return self.title


class Publish(models.Model):
    name = models.CharField("出版社名", max_length=32)
    address = models.CharField("位址", max_length=32)

    def __str__(self):
        return self.name      

forms.py

from django import forms


class AuthorForm(forms.Form):
    name = forms.CharField(label="姓名", max_length=32)
    age = forms.IntegerField(label="年齡")
    gender = forms.ChoiceField(choices=((1, "男"), (2, "女")))


class BookForm(forms.Form):
    title = forms.CharField(label="書名", max_length=32)
    publish_time = forms.DateField(label="發行時間")
    publish = forms.ModelChoiceField(label="出版社", queryset=Publish.objects.all())
    authors = forms.ModelMultipleChoiceField(label="作者", queryset=Authors.objects.all())      

 别忘記點贊哦!     ~.~