Форк Джанго-Оскара - Ошибка неизвестных полей (но поля в моделях) - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь раскошелиться на django-oscar, чтобы изменить форму панели мониторинга для атрибутов продукта, multioption. Необходимо иметь поле описания для каждой опции.

project/oscar_fork/catalogue/models.py:
from django.db import models
from django.utils.translation import ugettext_lazy as _
from oscar.apps.catalogue.abstract_models import AbstractAttributeOption, AbstractAttributeOptionGroup

class AbstractAttributeOption(AbstractAttributeOption):
  description = models.CharField(_('Description'), max_length=250, blank=True)
  group = models.ForeignKey(
        'catalogue.AttributeOptionGroup',
        on_delete=models.CASCADE,
        related_name='optionsblabla',
        verbose_name=_("Group"))

from oscar.apps.catalogue.models import *

Модели изменены с дополнительным полем "description" в моей БД, но все равно мои поля формы не могут найти это поле.

project/oscar_fork/dashboard/catalogue/forms.py:
from oscar.apps.dashboard.catalogue import forms as base_forms

class AttributeOptionForm(base_forms.AttributeOptionForm):
  class Meta(base_forms.AttributeOptionForm.Meta):
    fields = ('option', 'description')

Если я изменю поля form.py и models.py прямо в приложении Oscar, это сработает. Другие формы могут быть легко разветвлены, как показано выше. Попробовал это с AttributeOptionGroupForm. Я думаю, что есть проблема с последовательностью импорта. Как я могу решить это?

Error:
django.core.exceptions.FieldError: Unknown field(s) (description) specified for AttributeOption

Я использую django-oscar v1.6. Джанго v.2.08.

1 Ответ

0 голосов
/ 13 сентября 2018

Ваша конкретная модель должна иметь имя AttributeOption без 'Abstract', в противном случае Оскар не подберет ее и вместо этого будет использовать собственную модель AttributeOption, у которой нет описания:

class AttributeOption(AbstractAttributeOption):
    description = ...

Выпосле этого придется запустить makemigrations и migrate.Проверьте исходный код модуля models, который вы импортируете в конце.Вы увидите, как работает их динамическая загрузка моделей:

if not is_model_registered('catalogue', 'AttributeOption'):
    class AttributeOption(AbstractAttributeOption):
        pass
...