python - 基于 CreateView 和 UpdateView 的类在 Django 项目中不起作用
问题描述
我有 Django,其中有一个名为Listing的应用程序,它的模型如下,但CreateView和UpdateView没有为模型工作。
我也在使用mixins,但我已经实现了Custom User,这会导致问题吗?
- 出错
in get_form return form_class(**self.get_form_kwargs())
TypeError: 'ListingForm' object is not callable
- 任何其他用户正在更新其他人的列表,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
创建视图
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)
更新视图
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
表格.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。您需要添加您的表单名称。
创建视图
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)
更新视图
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
推荐阅读
- java - reuse same class in different class hierarchies
- matplotlib - I am trying to PLot Bar chart by integrating matplotlib with Pyspark. I am getting error
- nginx - Nginx IPV6 with CDN and real_ip
- python - 传递类参数python
- typescript - 更新节点 10 后,.d.ts 文件未在项目中生成
- python - 计算 2 列中共享相同值的单元格数
- php - 有什么方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?
- php - 实施具有强客户身份验证的条带
- jquery - jQuery验证后将表单发布数据传递给控制器功能
- javascript - NGRX dispatch 和 select 的执行顺序