【问题标题】:CreateView and UpdateView based class are not working in Django Project基于 CreateView 和 UpdateView 的类在 Django 项目中不起作用
【发布时间】:2021-08-13 09:21:33
【问题描述】:

我有 Django,其中有一个名为 Listing 的应用程序,它的模型如下,但 CreateViewUpdateView 没有为模型工作。
我也在使用 mixins 但我已经实现了 Custom User ,这会导致问题吗?

  1. 出现错误
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

创建视图

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

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']

提前解决!

【问题讨论】:

  • 不工作是什么意思?你得到什么错误,什么没有更新?
  • 您在创建视图中的form_valid 没有正确的参数。
  • 我没有收到任何错误当我在创建新列表时单击保存按钮时,它不会被添加到我的模型列表中第二个问题是假设我是员工并且管理员上传了列表但是我仍然可以编辑它。简而言之,UserPassessTestMixin 每次我猜都​​会返回 true!
  • @schwobaseggl 那你能改正吗?
  • @schwobaseggl 我将其编辑为 valid_form(self, form) 仍然无法正常工作

标签: python django django-models django-views django-forms


【解决方案1】:

您在更新和创建视图中缺少 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

【讨论】:

  • 我收到了一个错误,比如配置不正确,这意味着 id、owner 或 list_date 都会出错,因为所有其他字段都在表单中。在models.py ``` list_date = models.DateTimeField(auto_now_add=True, blank=True) ```
  • Noob_Coder 你在你的 def form_valid 或 def test_func 中犯了错误。
猜你喜欢
  • 2019-12-14
  • 2015-06-25
  • 2015-03-08
  • 2021-07-12
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多