Python 日期错误:参数必须是字符串或数字,而不是';datetime.datetime';
polls/models.py:Python 日期错误:参数必须是字符串或数字,而不是';datetime.datetime';,python,django,datetime,Python,Django,Datetime,polls/models.py: class Message(models.Model): auteur = models.ForeignKey(Personne) contenu = models.TextField() pub_date = models.DateTimeField(default=datetime.now(), blank=True, verbose_name="Date de publication") 视图。py: def welcome(re
class Message(models.Model):
auteur = models.ForeignKey(Personne)
contenu = models.TextField()
pub_date = models.DateTimeField(default=datetime.now(), blank=True, verbose_name="Date de publication")
视图。py:
def welcome(request):
logged_user = get_logged_user_from_request(request)
if not logged_user is None:
if 'newMessage' in request.GET and request.GET['newMessage'] != '':
newMessage = Message(auteur=logged_user, contenu=request.GET['newMessage'], pub_date = datetime.now())
newMessage.save()
friendMessages = Message.objects.filter(auteur__amis=logged_user).order_by('-pub_date')
return render_to_response('polls/home.html', {'logged_user': logged_user, 'friendMessages': friendMessages})
else:
return HttpResponseRedirect('/login')
当我跑步时:
python manage.py migrate
我得到了这个回溯:
TypeError:int()参数必须是字符串、类似对象的字节或数字,而不是“datetime.datetime”
我现在不知道为什么会出现这个错误。
default=datetime.now()
是失败的部分,但即使你修复了它,这也是个坏主意。它会将您的默认值设置为应用程序启动时的任何日期,因为datetime.now()将只计算一次。您可能想要的是注释中提到的auto\u add\u now=True
。您是否尝试过auto\u add\u now
pub\u date=models.datetime字段(auto\u add\u now=True,blank=True,verbose\u name=“date de publication”)
我在auto\u add\u now=True中也有同样的错误。您可以在代码中显示如何导入日期时间吗?另一个问题,您是否更改了模型上的某些内容,makemigrations的输出是什么?删除视图代码,它似乎与您的问题无关。无关:不要在服务器中使用datetime.now()
(服务器恰好使用的本地时区与您的用户无关,天真的本地时间可能不明确)。现在改用django.utils.timezone.now
)。确保理解Python中的f
(函数对象本身——也可以将其作为参数传递)和f()
(返回特定结果的函数调用)之间的区别。