gpt4 book ai didi

python - Django 管理员 : rendering page to add new object fails only when datetime field is included in fieldset

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:42 26 4
gpt4 key购买 nike

我一直在开发一个 Django 应用程序,以取代我和一些 friend 玩的基于电子表格的体育选择游戏。我不久前定义了我的游戏模型,但最近添加了一个日期时间字段来表示游戏/比赛的开始时间:

class Game(models.Model):
home_team = models.CharField(max_length=100, default='---')
away_team = models.CharField(max_length=100, default='---')
spread = models.FloatField(default=0)
week = models.IntegerField(default=0)
home_team_score = models.IntegerField(default=0)
away_team_score = models.IntegerField(default=0)
start_time = models.DateTimeField(default='2015-09-01 13:00:00')

def has_started(self):
if datetime.now() >= self.start_time:
return True
return False
def __str__(self):
return '%s vs. %s, week: %i' % (self.home_team, self.away_team, self.week)

我刚刚注意到,当我使用 Django 管理功能添加新游戏时,创建页面出错。但是,如果我单击现有游戏,页面显示正常,并且我可以按预期编辑开始时间。

抛出的错误是:

 AttributeError at /admin/app/game/add/
'str' object has no attribute 'date'

一些搜索返回了类似的问题,但它们与使用 auto_nowauto_now_add 定义日期时间字段为 True 有关,因此修复方法是以确保它将这些字段处理为只读。

这种情况就不一样了,就好像我在admin.py中定义了一个自定义的fieldset,不包含时间字段,点击添加新的时候创建页面不会报错一。例如:

class GameAdmin(admin.ModelAdmin):
fieldsets = [
('League week', {'fields': ['week'], }),
('Teams', {'fields': ['home_team', 'away_team'], }),
('Spread', {'fields': ['spread'], }),
]

list_filter = ['week']
search_fields = ['home_team','away_team']

这对于添加新游戏来说效果很好,我可以返回默认管理布局来更改默认时间。

我想我可能需要从日期时间导入日期,但添加它并没有帮助。为了正确处理日期,我需要使用不同的方式来定义字段集吗?

最佳答案

start_time 的默认属性设置为 datetime.datetime 的对象,即 datetime.datetime.now() 或在您的情况下

datetime.datetime(year=2015, month=9, day=1, hours=13)

尽管通过设置使用当前/动态时间作为默认被认为是很好的做法

default = datetime.datetime.now

default = django.utils.timezone.now

对于时区感知的日期时间(请参阅 .now 后面没有括号 ()),但这取决于您的用例。

关于python - Django 管理员 : rendering page to add new object fails only when datetime field is included in fieldset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34899302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com