5

这是我正在使用的模型:

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,然后才将它设置为 db 级别。

4

1 回答 1

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)
于 2012-03-07T21:57:32.197 回答