2012-03-07 106 views
5

这是我使用的模型:如何通过DateTimeField订购django-mptt树?

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设置为db级别之前,它试图获取DateTimeField,而它仍然是“None”。

回答

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)