Frage

Ich habe zwei neue Klassen, die vererben Modell Eintrag:

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

Nach dem Hinzufügen dieser neuen Modelle dem Server-Betreiber über admin.site.register Ich erhalte Valueerror wenn sie versuchen, einen Kommentar oder einen Rabatt über Admin zu erstellen. Hinzufügen von Einträgen funktioniert.

Fehlermeldung:

Valueerror auf / admin / Bewertungen / Rabatt / add / Can not assign " ''": "Discount.discount" muss eine "Discount" Instanz sein. Anfrage Methode: GET Anforderungs-URL: http://127.0.0.1:8000/admin/reviews/discount/ add / Ausnahmetyp: Valueerror Ausnahme Wert:
Can not assign " ''": "Discount.discount" muss eine "Discount" Instanz sein. Ausnahme Ort: /Library/Python/2.6/site-packages/django/db/models/fields/related.py in Satz , Linie 211 Python-Executable: / usr / bin / python Python Version: 2.6.1

War es hilfreich?

Lösung

Der Grund für diesen Fehler erschienen war, weil ich denselben Spaltennamen verwendet, die bereits mit Modellnamen verwendet wurde. Karen T. dazu beigetragen, die folgende Antwort in Django Mailingliste :

  

Das Problem scheint zu sein, dass Sie   ein Feld in Ihrem Kommentar Modell mit dem Namen   mit dem gleichen Namen, nur Fall senken.   Kommentar erbt von Eintrag, mit   Multi-Table-Vererbung. Dies fügt ein   OneToOneField in back   Eintrag, der eine Nebenwirkung hat von   ein ‚Kommentar‘ Attribut Eintrag hinzufügen.   Dies ist das Attribut, mit dem Sie   Zugriff auf den Kommentar mit dem zugehörigen   Eintrag als Ergebnis der   OneToOneField in Kommentar, und durch   Voreingestellt ist der Name des Gegebenen   verwandtes Modell, all-Klein.

     

  Problem dann auftritt, wenn der Kommentar   Modell „erbt alle   Felder / Attribute des Eintrags: das   geerbt ‚Kommentar‘ Attribut aus   Der Eintritt ist offenbar über Reiten der   angegebenes Kommentarfeld. das ist,   wahrscheinlich ein Fehler, aber es scheint   seit 1.0 dort gewesen. I hatte nicht   jede Forschung getan, um zu sehen, ob es gewesen   berichtet.

     

Als Abhilfe können Sie   nennen Sie Ihre Felder etwas anderes als   der Modellname alle klein geschrieben, oder Sie   kann explizit angeben, die   OneToOneField in den Kindermodels,   Angabe parent_link = True und   etwas anderes als die Modellnamen   alle Kleinbuchstaben für related_name.

Andere Tipps

Hunch sagt, dass Sie mit der Erklärung Ihres Eintrag Klasse als abstrakt man tun könnten, wenn Sie einen Eintrag als eigentliches Objekt benötigen, zu

...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...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top