Pregunta

He creado dos nuevas clases que heredan modelo de entrada:

class Entry(models.Model):
    LANGUAGE_CHOICES = settings.LANGUAGES

    language = models.CharField(max_length=2, verbose_name=_('Comment language'), choices=LANGUAGE_CHOICES)
    user = models.ForeignKey(User)
    country = models.ForeignKey(Country, null=True, blank=True)

    created = models.DateTimeField(auto_now=True)

class Comment(Entry):
    comment = models.CharField(max_length=2000, blank=True, verbose_name=_('Comment in English'))

class Discount(Entry):
    discount = models.CharField(max_length=2000, blank=True, verbose_name=_('Comment in English'))
    coupon = models.CharField(max_length=2000, blank=True, verbose_name=_('Coupon code if needed'))

Después de la adición de estos nuevos modelos de administración a través de admin.site.register Me estoy ValueError al intentar crear un comentario o un descuento vía de administración. Añadir entradas funciona bien.

Mensaje de error:

ValueError en / admin / comentarios / descuento / añadir / No se puede asignar " ''": "Discount.discount" debe ser una instancia de "descuento". Método de solicitud: GET Solicitud de URL: http://127.0.0.1:8000/admin/reviews/discount/ añadir / Tipo de excepción: ValueError Excepción Valor:
No se puede asignar " ''": "Discount.discount" debe ser una instancia de "descuento". Excepción Ubicación: /Library/Python/2.6/site-packages/django/db/models/fields/related.py en conjunto , la línea 211 Python ejecutable: / usr / bin / python La versión de Python: 2.6.1

¿Fue útil?

Solución

La razón de este error fue enviado precisamente porque yo mismo nombre de columna que ya se utilizó con el nombre del modelo. Karen T. contribuyó la siguiente respuesta en Django lista de correo :

  

El problema parece ser que usted tiene   llamado un campo en el modelo de comentario   con el mismo nombre, sólo se minúsculas.   Comentar hereda de entrada, usando   multi-mesa-herencia. Esto añade una   OneToOneField en la parte posterior comentario de   Entrada, que tiene un efecto secundario de   añadiendo un atributo 'comentario' a la entrada.   Este es el atributo que le permite   acceder al comentario asociado a la   Entrada como resultado de la   OneToOneField en comentario, y por   defecto se le dio el nombre de la   modelo relacionado, en minúsculas.

     

La   problema, entonces se produce cuando el comentario   modelo "hereda toda la   campos / atributos de entrada: la   heredado 'comentario' atributo de   La entrada es aparentemente primordiales del   campo de comentario especificado. Eso es   probablemente un error, pero parece   han estado allí desde 1,0. yo no he   hecho ninguna investigación para ver si ha sido   informó.

     

Como una solución que pueda   nombrar sus campos de algo que no sea   el nombre del modelo todo en minúsculas, o   puede especificar explícitamente el   OneToOneField en los modelos de los niños,   especificando parent_link = True y   algo más que el nombre del modelo   todo en minúsculas para related_name.

Otros consejos

Corazonada dice que podría hacer con declarar su clase de Entrada como uno abstracto a menos que necesite una entrada como un objeto real, también

...rest of Entry model here...
created = models.DateTimeField(auto_now_add=True) ## ONLY set date when created, not every save

class Meta:
   abstract = True

...methods for your model etc...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top