Проблема Django fieldsets при сохранении - PullRequest
0 голосов
/ 18 марта 2011

Я сделал следующее.Не уверен, что это правильно:

class FooAdmin(admin.ModelAdmin):
    fieldsets = (
        # ...
    )
    other_fieldsets = (
        # ...
    )

    def get_fieldsets (self, request, obj = None):
        if some_cond:
            return self.other_fieldsets
        return self.fieldsets

Обновление: def отсутствует.Но, конечно, это не было проблемой, как только я получил ошибку проверки Django.

Теперь в этой модели администратора, когда я сохраняю, выдает стандартную ошибку проверки поля сверху, но ни одно поле не помечено какнедействительным.Я попытался установить все поля на blank = True, но я могу только заставить его работать, удаляя get_fieldsets ().

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Как указал Юджи Томита, вы не можете использовать get_fieldsets () без переопределения формы с помощью get_form ():

class MyModelAdmin(admin.ModelAdmin):
    def get_fieldsets(self, request, obj=None):
        if obj:
            return [(None, {'fields': ('field_c', 'field_b')})]
        return [(None, {'fields': ('field_a', 'field_b', 'field_c')})]

    def get_form(self, request, obj=None, **kwargs):
        if obj:
            defaults = {'exclude': ('field_a',)}
        else:
            defaults = {}
        defaults.update(kwargs)
        return super(MyModelAdmin, self).get_form(request, obj, **defaults)

Поскольку я просто разбивал форму на наборы полей и показывал их в соответствии с пользователямиЯ думаю, что в этом случае Django все еще думает, что ему нужно проверить поля, которые на самом деле не в форме из-за get_fieldsets ().Как только эти поля исключены в get_forms (), все начинает работать.

Большое спасибо, Юджи Томита.

0 голосов
/ 18 марта 2011

Здесь явно есть синтаксическая ошибка.Вам нужно ключевое слово def, чтобы определить функцию.Например:

def get_fieldsets (self, request, obj = None):
    if some_cond:
        return self.other_fieldsets
    return self.fieldsets

Но это тоже не сработает (хотя и синтаксически правильно), потому что администратор должен вызывать его.иметь разные наборы полей в зависимости от запроса, отправленного пользователем.Я не думаю, что в настоящее время это возможно, потому что вы устанавливаете наборы полей статически в классе раз и навсегда.Не могли бы вы объяснить, чего именно вы пытаетесь достичь, возможно, мы сможем найти какое-то решение.

...