3

У меня есть модель людей, у которой есть собственное Иностранное поле Матери. Когда пользователь переходит к форме «добавить» администратора, я хочу определить начальное значение для Мать, если есть параметр GET («мать») или оставить его пустым, в противном случае.Django - определение начального значения ForeignField в Admin

У меня есть на самом деле 2 вопроса:

  1. Как получить доступ запрос внутри ModelAdmin?
  2. Как определить начальное значение для ForeignField?

В models.py:

class Person(models.Model): 
    name=models.CharField() 
    mother=models.ForeignKey('self') 

В admin.py:

class PersonAdminForm(forms.ModelForm): 
    class Meta: 
     model = Person 

class PersonAdmin(admin.ModelAdmin): 
    mother = request.GET.get('mother','') #don`t know how to access request 

    if mother != '': 
     form = PersonAdminForm 
     form.initial={'mother':Person.objects.get(id=mother)} 

Ну, это не работает. Даже если я только попытаюсь определить твердое начальное значение, он не работает.

Что я делаю неправильно?

PS: Конечно, я могу задавать неправильные вопросы, поэтому я ценю любую помощь, которая решает проблему.

ответ

4

Мое решение:

class PersonAdmin(admin.ModelAdmin): 
    form = PersonAdminForm 
    # ... 
    def get_form(self, request, obj=None, *args, **kwargs): 
     form = super(PersonAdmin, self).get_form(request, *args, **kwargs) 
     # Initial values 
     form.base_fields['mother'].initial = None 
     if obj and obj.mother: 
      form.base_fields['mother'].initial = obj.mother 
     return form 
+0

Привет, он работает. И это на самом деле более универсальный, поэтому я устанавливаю это как правильный ответ. Потребовал мне время, чтобы снова попробовать что-то подобное и найти свой ответ на свой вопрос: P – pedrovgp

+0

Почему вы делаете 'form = PersonAdminForm' в классе? – becko

+0

Обычно для добавления пользовательского поведения https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#adding-custom-validation-to-the-admin – Moreno

0

Попробуйте переопределение метода get_form() на ModelAdmin:

class PersonAdmin(admin.ModelAdmin): 
     form = PersonAdminForm 

     def get_form(self, request, *args, **kwargs): 
      form = super(PersonAdmin, self).get_form(request, *args, **kwargs) 
      mother = request.GET.get('mother', None) 
      if mother: 
       form.initial = {'mother': Person.objects.get(id=mother)} 
      return form 
+0

Почти там! Он работал для доступа к запросу. Но как-то определение начального не работает. Ни этот путь, ни какой-либо другой. Я только что обновился с Django 1.3 до 1.4, но он ничего не сделал. – pedrovgp

1

О, это случается намного проще, чем я думал.

Если вы передадите параметр GET с именем поля в качестве ключа в форму добавления Django, значение параметра GET будет установлено как начальное значение для этого поля.

В моем случае, мне просто нужно перенаправить

LOCALHOST/админ/my_app/чел/добавить /? & mother = < id>

Не нужно было манипулировать администратором или чем-либо еще.

 Смежные вопросы

  • Нет связанных вопросов^_^