2012-03-07 101 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)