Форма продукта с помощью CreateView на основе класса

Я пытаюсь создать форму продукта с помощью 'Create View' как представление на основе класса, но в терминале появляется сообщение о проблеме, как показано в следующем фрагменте.

models.py

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

class Products(models.Model):
    
    def __str__(self):
        return self.product_name
    user_name=models.ForeignKey(User, on_delete=models.CASCADE, default=1) 
    product_name=models.CharField(max_length=200)
    product_descript=models.CharField(max_length=200)
    product_price=models.IntegerField()
    product_image=models.CharField(max_length=500, default='#')

    def get_absolute_url(self):
        return reverse('food:detail', kwargs={'pk':self.pk})

url.py

from django.urls import path
from . import views

urlpatterns=[ 
          path('addj',views.CreateProduct.as_view(),name='add_product'),
          ]

views.py

from django.views.generic.edit import CreateView
from .models import Products

 class CreateProduct(CreateView):
   model= Products
   fields=['product_name','product_descript','product_price','product_image']
   template_name='food/product-form.html'
   def form_valid(self,form):
       format.instance.user_name=self.request.user
       return super().form_valid(form)

product-form.html

<form method="POST" >
  {% csrf_token %} 
{{form}}
 <button type="submit">
</form>

Может ли кто-нибудь помочь мне в этом вопросе?

Спасибо

Ошибка происходит из views.py, поэтому у вас есть способы решения ошибки

  1. У вас неправильный импорт CreateView. Правильный - from django.views.generic import CreateView.

  2. Вы можете разделить форму и представление, как указано ниже. предпочтительным является второй способ.

Код для forms.py

#forms.py

from django import forms
from .models import Products

class CreateProductForm(forms.ModelForm):
    class Meta:
        model = Products
        fields=['product_name','product_descript','product_price','product_image']

Код для views.py

# views.py
from django.views import generic
from django.urls import reverse_lazy
from .forms import CreateProductForm

class CreateProduct(generic.CreateView):
    form_class = CreateProductForm
    template_name='food/product-form.html'
    success_url = reverse_lazy('home')
Вернуться на верх