这是我正在使用的模型:
class Comment(MPTTModel):
comment = models.CharField(max_length=1023)
resource = models.ForeignKey('Resource')
created_at = models.DateTimeField(auto_now_add=True)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
author = models.ForeignKey(User)
class MPTTMeta:
order_insertion_by = ['created_at']
然而,当我尝试从管理站点添加评论时,我得到:
ValueError at /admin/app/comment/add/
Cannot use None as a query value
我的模特出了什么问题?我觉得django-mptt尝试获取DateTimeField,而它仍然是“None”,然后才在db级别设置。
答案 0 :(得分:8)
不,你没有做错事。这是django-mptt中的一个错误。
基本上auto_add_now=True
的日期时间字段在django-mptt尝试找出在树中插入模型的位置之前不会得到值。
我刚刚在django-mptt上创建了一个问题来解决这个问题:https://github.com/django-mptt/django-mptt/issues/175
与此同时,您可以通过自己主动设置值来解决此问题。摆脱auto_now_add=True
,并在模型上重写的save()方法中设置值::
from datetime import datetime
class Comment(MPTTModel):
comment = models.CharField(max_length=1023)
resource = models.ForeignKey('Resource')
created_at = models.DateTimeField()
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
author = models.ForeignKey(User)
class MPTTMeta:
order_insertion_by = ['created_at']
def save(self, *args, **kwargs):
if not self.created_at:
self.created_at = datetime.now()
super(Comment, self).save(*args, **kwargs)