Django модель из создания новой записи вместо обновления старой - PullRequest
0 голосов
/ 27 марта 2020

Я новичок в Django. Моя проблема в том, что я обновляю свою запись, но она добавляет новую запись вместо обновления старой.

Где я go ошибся?

views.py


class EditProduct(TemplateView):
    template_name = 'stock/editproduct.html'

    def get(self, request, product_id):
        productedit = get_object_or_404(Product, pk=product_id)
        data=Product.objects.get(id=product_id)
        form = EditProductForm(instance=data)
        args = {'form':form, 'productedit':productedit}
        return render(request, self.template_name, args)

    def post(self, request, product_id):
        form = EditProductForm(request.POST, request.FILES)
        if form.is_valid():
            productadded = form.save(commit=False)
            productadded.saler =  request.user
            productadded.pub_date = timezone.datetime.now()
            productadded.save()
            return redirect('stock')
        else:
            args = {'form': form}
            return render(request, self.template_name, args)

1 Ответ

0 голосов
/ 27 марта 2020

Я предполагаю, что stock - это имя приложения / папки, которая содержит views.py, models.py, url.py.

views.py. См. здесь для документации по UpdateViews.

from django.views.generic import UpdateView
from django.utils import timezone
from stock.models import Product
from stock.forms import EditProductForm 

Class ProductUpdateView(UpdateView):
    model = Product
    form_class = EditProductForm
    success_url = reverse_lazy('stock:product_list')
    template_name = 'stock/editproduct.html'

    def form_valid(self, form):
        form.instance.saler =  self.request.user
        form.instance.pub_date = timezone.now()
        return super().form_valid(form)

urls.py

from stock import views

app_name = 'stock'
urlpatterns = [
    path('product/update/<int:pk>', views.ProductUpdateView.as_view(), name='product_update'),
    path('product/list', views.ProductListView.as_view(), name='product_list'
]

Приведенный ниже фрагмент можно добавить на html страницы продукта, которую вы хотите обновить, обычно это страница сведений о продукте. сгенерированный классом или функцией представления сведений.

На этой странице добавьте кнопку, чтобы перейти на страницу обновления, указав идентификатор продукта, который вы хотите обновить.

<a class="btn btn-outline-warning waves-effect" href="{% url 'stock:product_update' pk=product.pk %}"> Update product</a>
...