Domanda

ho creato due nuove classi che ereditano il modello Entry:

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

Dopo aver aggiunto questi nuovi modelli di amministrazione via admin.site.register sto ottenendo ValueError quando si cerca di creare un commento o uno sconto tramite admin. Aggiunta di voci funziona bene.

msg di errore:

ValueError a / admin / recensioni / sconto / aggiungere / Impossibile assegnare " ''": "Discount.discount" deve essere un esempio "Sconto". Richiesta Metodo: GET Richiesta URL: http://127.0.0.1:8000/admin/reviews/discount/ aggiungere / Eccezione Tipo: ValueError Eccezione Valore:
Impossibile assegnare " ''": "Discount.discount" deve essere un esempio "Sconto". Eccezione Località: /Library/Python/2.6/site-packages/django/db/models/fields/related.py in set , la linea 211 Python eseguibile: / usr / bin / python Python Versione: 2.6.1

È stato utile?

Soluzione

La ragione di questo errore è apparso è stato perché ho usato lo stesso nome di colonna che è già stato utilizzato con il nome del modello. Karen T. ha contribuito la seguente risposta in Django mailing list :

  

Il problema sembra essere che hai   chiamato un campo nel modello commento   con lo stesso nome, abbassare unico caso.   Commento eredita da ingresso, utilizzando   multi-tavolo-ereditarietà. Questo aggiunge un   OneToOneField nel Commento di nuovo a   Entry, che ha un effetto collaterale di   l'aggiunta di un attributo 'commento' a voce.   Questo è l'attributo che consente di   accedere al commento associato alla   Entrata a seguito della   OneToOneField in commento, e   DEFAULT si è dato il nome di   il modello relativo, tutto in minuscolo.

     

Il   problema allora si verifica quando il commento   modello "eredita tutta la   campi / attributi di entrata: il   ereditato attributo 'commento' dal   L'ingresso è a quanto pare over-sella alla   specificata campo di commento. Quello è   probabilmente di un bug, ma sembra   sono stati lì dal 1.0. Non ho   fatto alcuna ricerca per vedere se è stato   segnalati.

     

Per risolvere il problema si può   denominare i campi di qualcosa di diverso   il nome del modello tutti caratteri minuscoli, o   può specificare esplicitamente il   OneToOneField nei modelli del bambino,   specificando parent_link = True e   qualcosa di diverso dal nome del modello   tutto in minuscolo per related_name.

Altri suggerimenti

Hunch dice si potrebbe fare con dichiarando la classe Entry come un astratto a meno che non avete bisogno di una voce come un oggetto vero e proprio, anche

...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...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top