You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django后台添加航班报错'bool'无'utcoffset'属性及字段疑问

问题解决步骤

1. 修复后台添加航班的AttributeError错误

报错根源是Flight模型中DateTimeField和DurationField的default参数设置错误:你给这些字段的default设成了布尔值True,但Django期望的是对应类型的默认值(比如datetime对象、timedelta对象或者None)。

修改Flight模型中的字段定义:

class Flight(models.Model):
    # 保留原有origin、destination字段...
    duration = models.DurationField(null=True, blank=True)  # 移除错误的default=True,或设置合法默认值如timedelta(hours=2)
    arrivaltime = models.DateTimeField(null=True, blank=True)
    departuretime = models.DateTimeField(null=True, blank=True)

如果需要设置默认值,比如默认起飞时间为当前时间,可以这样写:

from django.utils import timezone

departuretime = models.DateTimeField(null=True, blank=True, default=timezone.now)

修改后执行数据库迁移:

python manage.py makemigrations
python manage.py migrate

2. 修正Airport模型的多对多字段设置

当前设置存在几个可优化点:

  • 模型类名不符合Django规范:runway应改为大写开头的Runway(类名采用大驼峰命名法)
  • 字段名拼写错误:airportrunwway多了一个w,建议改为更清晰的runways
  • ManyToManyField的null=True参数多余,多对多字段本身不存储NULL值,只需保留blank=True允许表单为空即可

修正后的模型代码:

class Runway(models.Model):
    number = models.IntegerField(verbose_name="跑道编号")  # 字段名更具语义化

    def __str__(self):
        return f"跑道{self.number}"

class Airport(models.Model):
    code = models.CharField(max_length=64, unique=True)
    city = models.CharField(max_length=64)
    runways = models.ManyToManyField(Runway, blank=True, verbose_name="所属跑道")
    
    def __str__(self):
        return f'{self.id}:{self.city} ({self.code})'

3. 实现后台按起降时间排序筛选功能

在admin.py中配置Flight的Admin类,添加排序和筛选功能:

from django.contrib import admin
from .models import Flight

@admin.register(Flight)
class FlightAdmin(admin.ModelAdmin):
    # 后台列表显示字段
    list_display = ('id', 'origin', 'destination', 'departuretime', 'arrivaltime')
    # 按起降时间排序(负号表示降序)
    ordering = ('departuretime', 'arrivaltime')
    # 添加筛选器
    list_filter = ('departuretime', 'arrivaltime', 'origin', 'destination')

这样在后台列表页就可以通过侧边栏筛选起降时间,同时列表会默认按起飞时间升序排列。


内容的提问来源于stack exchange,提问作者Janardhan Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:25:31