python - Django - 无法让模型在模板中显示

标签 python django

我正在为志愿消防员创建一个可用性应用程序,但无法在模板中显示模型字段之一:

models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Team(models.Model):
  name = models.CharField('Name', max_length = 200)

  def __str__(self):
    return self.name

class Firefighter(models.Model):
  RANKS = (
    ('CFO', 'Chief Fire Officer'),
    ('DCFO','Deputy Chief Fire Officer'),
    ('SSO', 'Senior Station Officer'),
    ('SO', 'Station Officer'),
    ('SFF', 'Senior Firefighter'),
    ('QFF', 'Qualified Firefighter'),
    ('FF', 'Firefighter'),
    ('RFF', 'Recruit Firefighter'),
    ('OS', 'Operational Support'),
  )

  STATUS_OPTIONS = (
    ('AV', 'Available'),
    ('OD', 'On Duty'),
    ('UN', 'Unavailable'),
    ('LV', 'Leave'),
  )
  
  rank = models.CharField("Rank", max_length = 50 , choices=RANKS, default='RFF')
  first_name = models.CharField("First Name", max_length = 200)
  last_name = models.CharField("Last Name", max_length = 200)
  start_date = models.DateField(name="Start Date")
  status = models.CharField("Status", max_length = 20 , choices=STATUS_OPTIONS, default='Available')
  driver = models.BooleanField('Driver', default=False)
  officer = models.BooleanField('Officer Qualified', default=False)
  teams = models.ManyToManyField(Team)

  def __str__(self):
   return self.first_name + ' ' + self.last_name

  class Meta:
        verbose_name = "Firefighter"
        verbose_name_plural = "Firefighters"

views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from django.forms import ModelForm
from .models import Firefighter
from django.http import HttpResponseRedirect

# Create your views here.
@login_required(login_url='/login/')
def status(request):

  firefighters = Firefighter.objects.all()

  context = {
    'firefighters': firefighters,
    'availableCount': firefighters.filter(status='AV').count() + firefighters.filter(status='OD').count(),
    'leaveCount': firefighters.filter(status='LV').count(),
    'unAvCount': firefighters.filter(status='UN').count()
  }
  
  return render(request, 'status.html', context)

@login_required(login_url='/login/')
def details(request, id):
  class ChangeStatus(ModelForm):
    class Meta:
      model = Firefighter
      fields = ['status']
  
  form = ChangeStatus()
  firefighter = Firefighter.objects.get(id=id)

  if request.method == 'POST':
    form = ChangeStatus(request.POST, instance=firefighter)
    if form.is_valid():
      form.save() 
      return HttpResponseRedirect('/status/')
  else:
    form = ChangeStatus()

  context = {
    'firefighter': firefighter,
    'form': form
  }
  
  return render(request, 'details.html', context)

def members(request):

  firefighters = Firefighter.objects.all().order_by('rank')

  context = {
    'firefighters': firefighters,
  }
  return render(request, 'members.html', context)

以及无法正确呈现的members.html:

{% extends "base.html" %}

{% block content %}
  <ul>
    {% for firefighter in firefighters %}
      <li> {{firefighter.rank}} {{firefighter.first_name}} {{firefighter.last_name}} {{firefighter.start_date}}</li>
    {% endfor %}
  </ul>
{% endblock content %}

members.html 将正确呈现 firefighter.first_namefirefighter.last_name,但不会显示 firefighter.start_date code> 即使每个消防员在数据库中都有指定的开始日期。

有什么想法可以解释为什么吗?

额外问题:在查询数据库时,有什么方法可以对模型中列出的排名进行排序吗?

最佳答案

在哪里定义 start_date 字段:

start_date = models.DateField(name="Start Date")

应该是:

start_date = models.DateField("Start Date")

Date_Field 中的第一个参数是 verbose_name,它将自动使用更可接受的 Snake_case 版本的名称设置名称。

关于python - Django - 无法让模型在模板中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557358/

相关文章:

python - 如何迁移类似于 Ruby on Rails 迁移的 Django 模型?

python - 如何使用horovod对正常值进行allreduce运算?

python - 无法绘制正确比例的圆 Matplotlib Python

python - Django 迭代 ClearableFileInput 小部件字段

mysql - Django loaddata 对于 unicode 失败

python - CommandError : App 'books' has migrations. 应用有迁移时只能使用sqlmigrate和sqlflush命令

python - 根据 Django 中 DateTimeField 的值变化触发操作

python - 交易成功后如何从PayPal获取invoice_id

c++ - Python ctypes : wraping c++ class with operators

python - 将值随机分配给 Pandas 数据框中的行子集