Django无法获取要在temp中显示的模型

2024-10-05 13:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在型号.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"

在视图.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)

以及成员.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 %}

那个成员.html将正确呈现firefighter.first_namefirefighter.last_name,但firefighter.start_date不会显示任何内容,即使每个消防员在数据库中都有指定的开始日期。你知道吗

你知道为什么吗?你知道吗

附加问题:在查询数据库时,有没有什么方法可以按列在模型中的列对列进行排序?你知道吗


Tags: djangonamefromimportformreturnmodelsrequest
2条回答

定义开始日期的字段:

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

应该是:

start_date = models.DateField("Start Date")

Date\字段中的第一个参数是verbose\ name,它将自动使用更可接受的snake\ case版本的名称设置名称。你知道吗

至于您的排序,请尝试为您的选择设置变量,使其具有可排序的值。你知道吗

CFO = ‘A’
DCFO = ‘B’
...

RANK_CHOICES = (
    (CFO, ‘Chief Fire Officer’),
    (DCFO, ‘Deputy Chief Fire Officer’)
    (...)
    )

如果您总是希望按排名查询结果:

class Meta:
    ordering = [‘rank’]

如果没有,请使用当前查询。你知道吗

如Zev的回答中所述,“name='label'”对任何字段都无效。它是verbose_name=‘label。根据字段的不同,可以将标签作为第一个参数放在引号中,但其他字段必须使用详细的名称。你知道吗

相关问题 更多 >

    热门问题