Вы передали свою модель атрибуту form
. Вот почему ComplaintForm
не очень хорошая идея для названия модели. Лучше переименуйте его в Complaint
, например:
class <b>Complaint</b>(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE)
category = models.CharField(max_length=255,choices=complaints,default='Mess')
title = models.CharField(max_length=20)
content = models.CharField(max_length=100)
image = models.ImageField(upload_to='complaint_pics/')
def __str__(self):
return self.title
. Вам нужно будет создать и запустить миграцию, чтобы переименовать таблицу на стороне базы данных.
Тогда вы определите свою форму как :
from app.models import <b>Complaint</b>
class ComplaintForm(forms.ModelForm):
class Meta:
model = <b>Complaint</b>
fields = ['title','content','image',]
Наконец, в вашем CreateView
вы можете использовать:
from app.models import Complaint
from app.forms import ComplaintForm
class CreateComplaintView(CreateView):
model = <b>Complaint</b>
form_class = <b>ComplaintForm</b>
template_name = 'user/post_complaint.html'
success_url = 'success'
def form_valid(self, form):
form.instance.user = self.request.user.profile
super().form_valid(form)
Примечание : обычно это Django модели, совсем как всем классам в Python присваивается имя в PerlCase , а не snake_case , поэтому оно должно быть: Complaint
вместо complaint
.