Вопрос

Я создал два новых класса, которые наследуют модель входа:

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

После добавления этих новых моделей для администратора через admin.site.register Я получаю ValuctionError при попытке создать комментарий или скидку через Admin. Добавление записей работает нормально.

Ошибка msg:

ValueError at / admin / examents / discount / add / не может назначить "''": «Скидка. Discount» должна быть экземпляром «скидка». Способ запроса: получить URL-адрес запроса: http://127.0.0.1:8000/admin/reviews/discount/add/Тип исключения: Значение исключения ValueError:
Не удается назначить «''»: «Скидка. Discount» должна быть экземпляром «скидки». Расположение исключения: /library/python/2.6/site-packages/django/db/models/fields/related.py в задавать, Линия 2111 исполняемость Python: / usr / bin / python python версия: 2.6.1

Это было полезно?

Решение

Причина этой ошибки появилась, потому что я использовал то же имя столбца, которое уже использовалось с именем модели. Карен Т. внесил следующий ответ в Список рассылки Django:

Проблема, кажется, что вы назвали поле в модели вашего комментария с тем же именем, только нижний регистр. Комментарий наследует от входа, используя многосторонние наследования. Это добавляет OneToonefield в комментарии обратно к записи, который имеет побочный эффект добавления атрибута «комментария» к записи. Это атрибут, который позволяет получить доступ к комментарию, связанному с записью в результате OneToonefield в комментарии, и по умолчанию предоставляется название соответствующей модели, все строчные.

Проблема возникает, когда модель комментариев «наследует» все поля / атрибуты записи: атрибут унаследованного «комментария» из записи, по-видимому, перезагружается на указанный поле комментариев. Это, вероятно, ошибка, но, похоже, было там с 1.0. Я не сделал никаких исследований, чтобы увидеть, сообщается ли это.

В качестве обходного пути вы можете назвать свои поля что-то, кроме имени модели, все ниже, или вы можете явно указать OneToonefield в дочерних моделях, указав parent_link = true и что-то другое, кроме имени модели, все ниже для знакомства.

Другие советы

SOWCH говорит, что вы можете сделать с объявлением вашего класса входа в качестве абстрактного, если вам тоже не нужен запись как фактический объект,

...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...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top