user298519
user298519

Reputation: 1190

Django: Use post() in UpdateView to populate form's fields with instance's existing field values

I have trouble getting the current instance's fields on my UpdateView. How do I get the specific instance based on its id?

views.py

class ShowUpdate(UpdateView):
  model = Show
  fields = ['description', 'season', 'episode']

  def post(self, request, **kwargs):
      request.POST = request.POST.copy()
      request.POST['description'] = "how to get instance description?" # problem here
      request.POST['season'] = 2
      return super(ShowUpdate, self).post(request, **kwargs)

models.py

class Show(models.Model):
  owner = models.ForeignKey(User, null=True, default=True, related_name='o')
  title = models.CharField(max_length=100)
  description = models.TextField(default='N/A', blank=True, max_length=250)
  season = models.IntegerField(default=0)
  episode = models.IntegerField(default=0)

  def get_absolute_url(self):
      return reverse('show:index')

  def __str__(self):
      return self.title

Upvotes: 0

Views: 3460

Answers (1)

Maks Skorokhod
Maks Skorokhod

Reputation: 645

Look to the UpdateView docs

This View has method get_object(self, queryset=None)

In you case just need to call it in POST method something like this:

class ShowUpdate(UpdateView):
  model = Show
  fields = ['description', 'season', 'episode']

  def post(self, request, **kwargs):
      self.object = self.get_object()
      request.POST = request.POST.copy()
      request.POST['description'] = self.object.description
      request.POST['season'] = 2
      return super(ShowUpdate, self).post(request, **kwargs)

Upvotes: 1

Related Questions