Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2017 13:21:42

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Проблема при миграции

Есть модель, управляемая через админку.
Код админки (admin.py) содержит следующие строки:

 class MaillistAdmin(admin.ModelAdmin):
    form = maillist_forms.MaillistForm
    filter_horizontal = 'shoppers'

В форме (forms.py)  поле shoppers формируется следующим образом:
 class MaillistForm(forms.ModelForm):
    shoppers = forms.ModelMultipleChoiceField(
        queryset = user_models.User.objects.filter(groups__name='SHOPPER', receive_maillists = True),
        required=False,
        widget = FilteredSelectMultiple(
        verbose_name='Shoppers',
        is_stacked=False
    ))
Проблема в том, что при запуске makemigrations или migrate вылетает ошибка:
ERRORS:
<class ‘mirror.maillists.admin.MaillistAdmin’>: (admin.E019) The value of 'filter_horizontal' refers to ‘shoppers’, which is not an attribute of ‘maillists.Maillist’.
Можно закомментировать строку “ filter_horizontal = …”, но не делать же это каждый раз при выполнении миграций, хотелось бы нормального решения, а не костыль.
Что тут можно сделать? Гугл не помог.
Попытка добавить в модель:
 class Maillist(models.Model):
    shoppers = None
Или так:
 class Maillist(models.Model):
...
    def __init__(self):
        super(Maillist, self).__init__()
        self.shoppers = None
в равной степени ничего не дала.
Что тут можно сделать?

Офлайн

#2 Ноя. 24, 2017 19:58:52

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Проблема при миграции

А что вообще сподвигло вас скормить джанго-админу несуществующее на модели поле?
Возможно, это изначально стоило делать несколько иначе

PS. так-то можно переопределить поведение system check framework`а, но, будем честны, эти проверки написаны неспроста, и скорее всего вам нужен рефакторинг, а не воркэраунд

Офлайн

#3 Ноя. 27, 2017 10:24:57

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Проблема при миграции

Поле - ManyToManyField на модель User
Нужна была сортировка пользователей по группам.
Пользователей много, и нужно иметь возможность в пару кликов выбрать всех, кто состоит в данной группе.
Shoppers - не единственный вариант сортировки, там на самом деле есть еще пара групп, иначе можно было бы просто ограничить queryset для поля user и проблемы бы ни было. Но кроме shoppers, есть еще и employee, для которых написан такой же код и дальше, при валидации формы, данные из shoppers и employee объединяются.
К сожалению, в админке не предусмотрена удобная сортировка для поля ManyToManyField, приходится изобретать такие вот велосипеды.

Офлайн

#4 Ноя. 27, 2017 12:37:00

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Проблема при миграции

Ну тогда вот такой велосипед попробуйте:

...
class YourClass(YourAncestor):
...
IGNORED_CHECKS = ('admin.E019',)
...
@classmethod
def check(cls, **kwargs):
def _purge(errors):
return [e for e in errors if e.id not in cls.IGNORED_CHECKS]

return _purge(super(YourClass, cls).check(**kwargs))
...

Ну или что-то в этом духе.

Отредактировано Slow (Ноя. 29, 2017 18:59:51)

Офлайн

#5 Ноя. 27, 2017 12:39:19

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Проблема при миграции

Ох. Чот я с отступами начудил. Ну да ладно, разберетесь, надеюсь

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version