Форум сайта python.su
Есть модель, управляемая через админку.
Код админки (admin.py) содержит следующие строки:
class MaillistAdmin(admin.ModelAdmin): form = maillist_forms.MaillistForm filter_horizontal = '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 ))
ERRORS:Можно закомментировать строку “ filter_horizontal = …”, но не делать же это каждый раз при выполнении миграций, хотелось бы нормального решения, а не костыль.
<class ‘mirror.maillists.admin.MaillistAdmin’>: (admin.E019) The value of 'filter_horizontal' refers to ‘shoppers’, which is not an attribute of ‘maillists.Maillist’.
class Maillist(models.Model): shoppers = None
class Maillist(models.Model): ... def __init__(self): super(Maillist, self).__init__() self.shoppers = None
Офлайн
А что вообще сподвигло вас скормить джанго-админу несуществующее на модели поле?
Возможно, это изначально стоило делать несколько иначе
PS. так-то можно переопределить поведение system check framework`а, но, будем честны, эти проверки написаны неспроста, и скорее всего вам нужен рефакторинг, а не воркэраунд
Офлайн
Поле - ManyToManyField на модель User
Нужна была сортировка пользователей по группам.
Пользователей много, и нужно иметь возможность в пару кликов выбрать всех, кто состоит в данной группе.
Shoppers - не единственный вариант сортировки, там на самом деле есть еще пара групп, иначе можно было бы просто ограничить queryset для поля user и проблемы бы ни было. Но кроме shoppers, есть еще и employee, для которых написан такой же код и дальше, при валидации формы, данные из shoppers и employee объединяются.
К сожалению, в админке не предусмотрена удобная сортировка для поля ManyToManyField, приходится изобретать такие вот велосипеды.
Офлайн
Ну тогда вот такой велосипед попробуйте:
...
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)
Офлайн
Ох. Чот я с отступами начудил. Ну да ладно, разберетесь, надеюсь
Офлайн