Home > front end >  Edit item within views in Django
Edit item within views in Django

Time:01-08

There is some problem, I'm trying to update the product on the client by making changes and clicking on the update button - my page is refreshing w/o updating info, so the product has the same data as before. But in the logs, the status code of the GET request is 200 and shows the updated object in the database. When I try to update through the admin Django dashboard, everything works successfully, the problem is only on the client side of the web application. What issues can there be? Thank you in advance!

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
CATEGORY = (
    ('Stationary', 'Stationary'),
    ('Electronics', 'Electronics'),
    ('Food', 'Food'),
)


class Product(models.Model):
    name = models.CharField(max_length=100, null=True)
    quantity = models.PositiveIntegerField(null=True)
    category = models.CharField(max_length=50, choices=CATEGORY, null=True)

    def __str__(self):
        return f'{self.name}'


class Order(models.Model):
    name = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
    customer = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    order_quantity = models.PositiveIntegerField(null=True)

    def __str__(self):
        return f'{self.customer}-{self.name}'

views.py

@login_required(login_url='user-login')
@allowed_users(allowed_roles=['Admin'])
def product_edit(request, pk):
    item = Product.objects.get(id=pk)
    if request.method == 'POST':
        form = ProductForm(request.POST, instance=item)
        if form.is_valid():
            form.save()
            return redirect('dashboard-products')
    else:
        form = ProductForm(instance=item)
    context = {
        'form': form,
    }
    return render(request, 'dashboard/products_edit.html', context)

forms.py

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

html template:

{% extends 'partials/base.html' %}
{% block title %}Products Edit Page{% endblock %}
{% load crispy_forms_tags %}

{% block content %}
<div >
    <div >
        <h3>Edit Item</h3>
        <hr>
        <form>
            {% csrf_token %}
            {{ form|crispy }}
            <input  type="submit" value="Confirm">
        </form>
    </div>
</div>
{% endblock %}

CodePudding user response:

You have forgotten to pass POST method you are using GET.

{% extends 'partials/base.html' %}
{% block title %}Products Edit Page{% endblock %}
{% load crispy_forms_tags %}

{% block content %}
<div >
    <div >
        <h3>Edit Item</h3>
        <hr>
        <form method="post">
            {% csrf_token %}
            {{ form|crispy }}
            <input  type="submit" value="Confirm">
        </form>
    </div>
</div>
{% endblock %}
  •  Tags:  
  • Related