Найти - Пользователи
Полная версия: Проблема при миграции
Начало » Django » Проблема при миграции
1
Elaphe
Есть модель, управляемая через админку.
Код админки (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
в равной степени ничего не дала.
Что тут можно сделать?
Slow
А что вообще сподвигло вас скормить джанго-админу несуществующее на модели поле?
Возможно, это изначально стоило делать несколько иначе

PS. так-то можно переопределить поведение system check framework`а, но, будем честны, эти проверки написаны неспроста, и скорее всего вам нужен рефакторинг, а не воркэраунд
Elaphe
Поле - ManyToManyField на модель User
Нужна была сортировка пользователей по группам.
Пользователей много, и нужно иметь возможность в пару кликов выбрать всех, кто состоит в данной группе.
Shoppers - не единственный вариант сортировки, там на самом деле есть еще пара групп, иначе можно было бы просто ограничить queryset для поля user и проблемы бы ни было. Но кроме shoppers, есть еще и employee, для которых написан такой же код и дальше, при валидации формы, данные из shoppers и employee объединяются.
К сожалению, в админке не предусмотрена удобная сортировка для поля ManyToManyField, приходится изобретать такие вот велосипеды.
Slow
Ну тогда вот такой велосипед попробуйте:
...
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
Ох. Чот я с отступами начудил. Ну да ладно, разберетесь, надеюсь
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB