2016-07-11 3 views
0

Я только недавно начал использовать представления на основе классов, и я до сих пор не знаю, как правильно выбрать правильное значение выпадающего списка.Django UpdateView: установите выпадающие списки на выбранное значение

У меня есть простой UpdateView вроде этого:

class SomeUpdate(PermissionRequiredMixin, UpdateView): 
    model = SomeModel 
    form_class = SomeCreateForm 
    permission_required = 'app.some_model' 
    template_name_suffix = '_update_form' 
    raise_exception = True 

    def form_valid(self, form): 
     from_page = self.request.GET.get('from') 
     if from_page: 
      self.success_url = self.request.GET.get('from') 
     else: 
      self.success_url = "/somewhere/" 
     return super(SomeUpdate, self).form_valid(form) 

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

form Используется только стандарт ModelForm с определенными полями. Само поле является Foreignkey.

Я попытался использовать get_initial(self) и т. Д., Чтобы установить выпадающее значение, но без успеха.

+0

Правильное выпадающее значение для данной модели уже должно быть заполнено для вас, если вы работаете с экземпляром модели (что делает UpdateView). У экземпляра, который вы показываете, есть допустимое значение, заданное для данного внешнего ключа? – Sayse

+0

Да, это должно быть правильно. Я только что проверил, и через него я могу получить доступ к выбранному иностранному ключу. Ни UpdateView, ни его использование через панель администратора также не порождают никаких ошибок. Но оба они не отбирают его. С другой стороны, поля ManyToMany показывают правильные отношения. –

ответ

0

я нашел рабочий раствор для моей проблемы:

Внутри класса:

def get_initial(self): 
    initial = super(MyObjectUpdate, self).get_initial() 
    try: 
     field1 = self.get_object().field1 
     field2 = self.get_object().field2 
    except: 
     pass 
    else: 
     initial['field1'] = field1.pk 
     initial['field2'] = field2.pk 
    return initial 

Это фиксированная моя проблема и расширяющий класс UpdateView теперь возвращает мой редактируемого форму с нужными значениями, выбранными в его выпадающих списков. Я не уверен, что это правильный/лучший способ сделать это.