[英]Why is “blank” is missing in django.forms.CharField, but present in django.db.models.CharField?
[英]Django.db.models.field.CharField
我有一個 Django 項目,我正在嘗試拼湊一個非常基本的調查,需要輸入人口統計信息。 我已經通過管理站點收集了一些數據,以便讓我的 ListView 暫時工作。 不幸的是,我得到了一個奇怪的回應。 我將models.py構建為完整拼寫的下拉列表,然后為了保持較小,我在db 1-3個字符中進行了實際存儲。 當我得到我的列表視圖時,一個使用 1 個字符來存儲性別的視圖呈現為(<django.db.models.fields.CharField>,)
,我希望它呈現為“男性”的較大名稱, “女性”,“非二進制”。 但是,對於我的 2 和 3 個字符的種族和種族字段,它們將作為數據庫的實際存儲返回(即“AA”、“NHP”)。 我對 SQL 更滿意,所以我不反對為一個鍵添加一個表,因為現在只有 11 個條目,但它可能會添加更多的東西。
模型.py:
from django.db import models
from django.contrib import admin
from django.contrib.auth.models import User
# Create your models here.
class StuData(models.Model):
id_num = models.IntegerField(primary_key=True)
entry_date = models.DateTimeField('Date of Entry')
MALE = 'm'
FEMALE = 'f'
OTHER = 'x'
GENUNK = 'u'
GENDER_SELECTIONS = [
(MALE,'Male'),
(FEMALE,'Female'),
(OTHER,'Non-Binary'),
(GENUNK,'Unknown'),
]
gender = models.CharField(max_length=1, choices=GENDER_SELECTIONS),
## Build the selections for the race field
AFR_RACE = 'AA'
ASI_RACE = 'AS'
WHI_RACE = 'WH'
UNK_RACE = 'UN'
RACE_SELECTIONS = [
(AFR_RACE, 'African-American'),
(ASI_RACE, 'Asian/Pacific Islander'),
(WHI_RACE, 'White'),
(UNK_RACE, 'Unknown Race'),
]
race = models.CharField(max_length=2, choices=RACE_SELECTIONS)
## Build the selections for the ethnicity field
HSP = 'HIS'
NHP = 'NHP'
UNK = 'UNE'
ETHNICITY_SELECTIONS = [
(HSP, 'Hispanic Origin'),
(NHP, 'Not of Hispanic Origin'),
(UNK, 'Unknown Ethnicity'),
]
ethnicity = models.CharField(max_length=10, choices=ETHNICITY_SELECTIONS)
stu_count = models.IntegerField(default=1)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
ordering = ["cad_num"]
def __str__(self):
return self.name
視圖.py:
from django.shortcuts import render
from django.http import HttpResponse
from mvstop.models import StuData
from django.views.generic.list import ListView
from django.views.generic.edit import UpdateView, CreateView
# Create your views here.
class StuDataList(ListView):
model = StuData
template = "myapp/studata_list.html"
fields = ""
paginate_by = 25
def Meta():
ordering = ['id_num']
def __str__(self):
return self.name
studata_list.html:
<!DOCTYPE html>
{% extends "./base.html" %}
{% block content %}
<h3>Most recent entries</h3>
<table id="studata">
<tr>
<th>ID Number</th>
<th>Entry Date</th>
<th>Gender</th>
<th>Race</th>
<th>Ethnicity</th>
<th>Count</th>
</tr>
{% for stu in studata_list %}
<tr>
<tr>
<td>{{ stu.id_num }}</td>
<td>{{ stu.entry_date }}</td>
<td>{{ stu.gender }}</td>
<td>{{ stu.race }}</td>
<td>{{ stu.ethnicity }}</td>
<td>{{ stu.occupants }}</td>
</tr>
{% endfor %}
</tr>
</table>
{% endblock %}
Django 有內置方法:
get_FIELD_display()
所以在你的模板中:
{% for stu in studata_list %}
<tr>
<tr>
<td>{{ stu.id_num }}</td>
<td>{{ stu.entry_date }}</td>
<td>{{ stu.get_gender_display }}</td>
<td>{{ stu.get_race_dispaly }}</td>
<td>{{ stu.get_ethnicity_display }}</td>
<td>{{ stu.occupants }}</td>
</tr>
{% endfor %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.