Как заказать дерево django-mptt по DateTimeField? - PullRequest
5 голосов
/ 07 марта 2012

Я использую модель:

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.

1 Ответ

8 голосов
/ 08 марта 2012

Нет, вы не делаете что-то не так. Это ошибка в 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)
...