Question

Je créé deux nouvelles classes modèle Hériter Entrée:

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

Après l'ajout de ces nouveaux modèles à admin via admin.site.register Je reçois ValueError en essayant de créer un commentaire ou une réduction par admin. Ajout d'entrées fonctionne très bien.

msg d'erreur:

ValueError à / admin / critiques / réduction / ajouter / Ne peut pas affecter « « » »: « Discount.discount » doit être une instance « Discount ». Demande Méthode: GET URL de demande: http://127.0.0.1:8000/admin/reviews/discount/ ajouter / Type d'exception: ValueError Exception Valeur:
Ne peut pas affecter « « » »: « Discount.discount » doit être une instance « Discount ». Exception Localisation: /Library/Python/2.6/site-packages/django/db/models/fields/related.py ensemble , ligne 211 Python Executable: / usr / bin / python Python Version: 2.6.1

Était-ce utile?

La solution

La raison de cette erreur est apparue parce que j'utilisé le nom même de la colonne qui a déjà été utilisé avec le nom du modèle. Karen T. a contribué à la réponse suivante Django liste de diffusion :

  

Le problème semble être que vous avez   nommé un champ dans votre modèle Commentaire   avec le même nom, baissez seul cas.   Commentaire de l'entrée hérite, en utilisant   multi-table héritage. Cela ajoute une   OneToOneField dans le dos de commentaire à   Entrée, qui a un effet secondaire de   l'ajout d'un attribut « commentaire » à l'entrée.   Ceci est l'attribut qui vous permet de   accéder au commentaire associé à la   Entrée à la suite de la   OneToOneField dans Commentaire, et par   défaut, il est donné le nom de la   modèle connexe, tout en minuscules.

     

  problème se produit alors lorsque le commentaire   modèle « hérite tous les   champs / attributs d'entrée: la   attribut hérité « commentaire » de   L'entrée est apparemment trop surfe sur la   champ de commentaire spécifié. C'est   probablement un bug, mais il semble   ont été là depuis la version 1.0. je n'ai pas   fait des recherches pour voir si elle a été   signalé.

     

Pour contourner ce problème, vous pouvez   nommer vos champs autre chose que   le nom du modèle tout en minuscules, ou vous   peut spécifier explicitement le   OneToOneField dans les modèles enfants,   spécifiant parent_link = True et   autre chose que le nom du modèle   tous pour related_name en minuscules.

Autres conseils

Hunch dit que vous pourriez faire avec la déclaration de votre classe d'entrée comme abstraite, sauf si vous avez besoin d'une entrée comme un objet réel, trop

...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...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top