Сайт администратора Django: Как работает страница «Добавить пользователя» (дополнительные поля для редактирования)? - PullRequest
1 голос
/ 14 октября 2010

Мне было интересно, как они позволили отобразить больше полей на странице пользователя сайта администратора Django. Если вы создаете нового пользователя, у вас есть только некоторые основные поля для заполнения, но если вы снова откроете этого пользователя (режим редактирования), то увидите гораздо больше полей для заполнения.

Я пытаюсь добиться того же самого, я посмотрел на шаблон add_form.html, но не могу разобраться с этим. Я думаю, что я ищу способ задания различных полей = [] наборов на основе статуса редактирования документа.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Ответ лежит в пользовательском классе администратора, зарегистрированном для модели User .Он переопределяет несколько методов в ModelAdmin и проверяет, создает ли текущий запрос новый User (в этом случае используется простой класс формы для добавления учетных записей) или редактирует существующий (в этом случаеполная форма показана).

1 голос
/ 14 октября 2010

Вот моя попытка. Когда я пытаюсь создать новый элемент (Добавить), он показывает только определенные поля, но затем, когда я нажимаю Сохранить, он возвращает ошибку:

DoesNotExist

в /Library/Python/2.6/site-packages/django/db/models/fields/related.py в get , строка 288

admin.py

    from django.contrib import admin
    from myapp.catalog.models import Model
    from myapp.catalog.forms import ProductAdminForm, ProductAddForm

    class ProductAdmin(admin.ModelAdmin):

        form = ProductAdminForm

        #...

        add_form = ProductAddForm

        def get_form(self, request, obj=None, **kwargs):
            defaults = {}
            if obj is None:
                defaults.update({
                    'form': self.add_form,
                })
            defaults.update(kwargs)
            return super(ProductAdmin, self).get_form(request, obj, **defaults)

forms.py

from myapp.catalog.models import Product

class ProductAdminForm(forms.ModelForm):

    class Meta:
        model = Product
        #...

class ProductAddForm(forms.ModelForm):
    class Meta:
      model = Product
      fields = ("model", "colour",)
...