Представление, которое является как add / edit (так и URL для поддержки), чтобы по существу выполнить update_or_create в django - PullRequest
0 голосов
/ 14 января 2019

Так что я хочу использовать update_or_create. Вот так выглядит мой взгляд, но он не выглядит правильным ...

РЕДАКТИРОВАТЬ Обновленный код

Шаблон URL:

  url(r'^businessinformation/(?P<pk>[0-9]+)/$', BusinessInformationUpdate.as_view(), name='business_information_update'),

Использование URL:

<li><a href="{% url 'ipaswdb:business_information_update' 1 %}"> Edit Business Information</a></li>

Остальной код

class BusinessInformationUpdate(UpdateView):

  model = BusinessInformation
  form_class = BusinessInformationForm
  template_name = 'ipaswdb/business_information/business_information_form.html'        
  success_url = '/ipaswdb'

  def get_object(self):
    pk = self.kwargs.get('pk')
    obj, created = BusinessInformation.objects.update_or_create(
      pk=pk, defaults={'businessName': 'Your Special Business', 
        'business_address_line_one':'100 Great Job Lane', 
        'business_city':'Anywhere',
        'business_state':'Your State',
        'business_zip':'00000',
        'business_phone':'555-555-5555',
        'business_fax' : '555-555-5555'
      })
    return obj




  def form_valid(self, form):                                                                                                     
    self.object = form.save()
    print(self.object) # prints the right changed value just never makes it back to the db?!

    return HttpResponseRedirect(self.success_url) 

1 Ответ

0 голосов
/ 15 января 2019

Я не думаю, что эта реализация будет работать. Потому что он должен выдавать ошибку при попытке извлечь объект из БД, если он не создан (в методе get_object). Итак, если вы можете переопределить это вместо этого следующим образом:

class BusinessInformationUpdate(UpdateView):
    ...

    def get_object(self):
       pk = self.kwargs.get('pk')
       obj, created = BusinessInformation.objects.update_or_create(
        pk=pk, defaults={'businessName': 'Your Special Business', 
                'business_address_line_one':'100 Great Job Lane', 
                'business_city':'Anywhere',
                'business_state':'Your State',
                'business_zip':'00000',
                'business_phone':'555-555-5555',
                'business_fax' : '555-555-5555'
       })
       return obj

И не нужно переопределять метод get_context_data.

...