2012-03-07 16 views
5

Este es el modelo que estoy utilizando:Cómo pedir el árbol django-mptt por DateTimeField?

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'] 

Sin embargo, cuando intento agregar un comentario desde el sitio de administración de recibo:

ValueError at /admin/app/comment/add/ 
Cannot use None as a query value 

¿Estoy haciendo algo mal con mi modelo? Siento que django-mptt está tratando de obtener el DateTimeField mientras todavía es "None", antes de que se haya establecido en el nivel de db.

Respuesta

8

No, no estás haciendo algo mal. Este es un error en django-mptt.

Básicamente campos de fecha y hora con auto_add_now=True no obtienen un valor hasta después de que django-mptt intenta averiguar dónde insertar su modelo en el árbol.

que acaba de crear un tema en django-MPTT para solucionar este problema: https://github.com/django-mptt/django-mptt/issues/175

Mientras tanto, se puede evitar esto mediante el establecimiento de manera proactiva el valor mismo. Deshágase de auto_now_add=True, y establezca el valor en un método save() anulado en su modelo ::

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) 
Cuestiones relacionadas