基于CreateView和UpdateView的类在Django项目中不工作



我有Django在其中有一个应用程序名为清单它的模型如下,但是CreateViewUpdateView不是为模特工作。
我也使用mixins但是我实现了自定义用户,这有什么问题吗?

得到误差
in get_form return form_class(**self.get_form_kwargs())
TypeError: 'ListingForm' object is not callable
  1. 任何其他用户正在更新其他人的列表,UserPassesTestMixin不工作
import uuid
from django.db import models
from django.urls import reverse
from django.contrib.auth import get_user_model
User = get_user_model()
class Listing(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
...other fields

CreateView

class ListingCreateView(LoginRequiredMixin, CreateView):
model = Listing
form_class = ListingForm()
def form_valid(self, form):
form.instance.owner = self.request.user
return super().form_valid(form)

UpdateView

class ListingUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Listing
form_class = ListingForm()
def form_valid(self, form):
form.instance.owner = self.request.user
return super().form_valid(form)
def test_func(self):
listing = self.get_object()
#print(self.request.user, listing.owner)
if(self.request.user == listing.owner):
return True
else:
return False

forms.py

from django import forms
from .models import Listing

class ListingForm(forms.ModelForm):
class Meta:
model = Listing
fields = ['price', 'sqft', 'acre', 'title', 'description', 'address', 'city', 'state',
'country', 'zipcode', 'photo_main', 'photo_1', 'photo_2', 'photo_3', 'photo_4', 'photo_5']

Tysm用于提前求解!

您缺少form_class在更新和创建视图中。你需要添加你的表单名。

CreateView

class ListingCreateView(LoginRequiredMixin, CreateView):
model = Listing
form_class = your form name
fields = blah blah blah

def form_valid(self, form):
form.instance.owner = self.request.user
return super().form_valid(form)

UpdateView

class ListingUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Listing
form_class = your form name
def form_valid(self, form):
form.instance.owner = self.request.user
return super().form_valid(form)
def test_func(self):
listing = self.get_object()
#print(self.request.user, listing.owner)
if(self.request.user == listing.owner):
return True
else:
return False

最新更新