0

I'm very new to programming. I would like to pass data from html input to update view and then save it to my database. Tried to search for it but with no luck. Here is my html code:

        <form action="{% url 'darbai:taskasupdate' pk=taskas.pk %}" method="POST">
        {% csrf_token %}
        <input type="text" name="pavad">
        <input type="text" name="atsak">

        <button type="submit"/>Update</button>
      </form>

Here is my model:

class Taskas(models.Model):
pavadinimas = models.CharField(max_length=30, null=True, blank=True)
atsakingas = models.CharField(max_length=30, null=True, blank=True)

Here is my urls:

urlpatterns = [
path('', CreateList.as_view(), name='CreateList'), 
path('delete/<int:pk>', TaskasDeleteView.as_view(), name='taskasdelete'),
path('update/<int:pk>', TaskasUpdateView.as_view(), name='taskasupdate'),

]

Here is my view:

class TaskasUpdateView(UpdateView):
model = Taskas
form_class = TaskasForm
success_url = reverse_lazy('darbai:CreateList')
def post(self, request, **kwargs):
    self.object = self.get_object()
    request.POST['pavad'] = self.object.pavadinimas
    request.POST['atsak'] = self.object.atsakingas

1 Answers1

0

You have perfect example in the Django documantation.

So your view class in views.py:

class TaskasUpdateView(UpdateView):
    model = Taskas
    fields= ['pavadinimas', 'atsakingas']
    success_url = reverse_lazy('darbai:CreateList')

The UpdateView generates standard ModelForm for your Tasks model and take care of saving form. Your urls.py are ok. In template(it should be named tasks_update_form.html):

 <form action="{% url 'darbai:taskasupdate' pk=taskas.pk %}" method="POST">
        {% csrf_token %}
        {{ form }}
        <button type="submit"/>Update</button>
      </form>
Sunderam Dubey
  • 1
  • 11
  • 20
  • 40
Waldemar Podsiadło
  • 1,365
  • 2
  • 5
  • 12
  • Jesus Crist, thank you! I was so frustrated with this and it is so simple. Thank you again! Everything works in one template as I wanted. – Janiauskas Aug 11 '22 at 20:18