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 は、db レベルで設定される前に、まだ「なし」である間に DateTimeField を取得しようとしているように感じます。

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 に答える