Форма продукта с помощью 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, поэтому у вас есть способы решения ошибки
У вас неправильный импорт
CreateView. Правильный -from django.views.generic import CreateView.Вы можете разделить форму и представление, как указано ниже. предпочтительным является второй способ.
Код для 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')