Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django从ListView创建模型_Django_Django Forms_Django Views - Fatal编程技术网

Django从ListView创建模型

Django从ListView创建模型,django,django-forms,django-views,Django,Django Forms,Django Views,我有一个ListView来列出模型的实例,我希望用户能够从同一页面创建一个新实例 我尝试了CreateView、FormMixin和ModelFormMixin的多重继承,我让它们都工作了,但是当表单无效时,我没有得到验证,我只得到了“视图”对象没有属性“object\u list” 我怎样才能做到这一点 为了处理模型创建,我是否应该分割关注点并有一个单独的视图?如果是这样,如何将无效错误返回到同一模板 我的自动取款机代码: @method_decorator(login_required, n

我有一个ListView来列出模型的实例,我希望用户能够从同一页面创建一个新实例

我尝试了CreateView、FormMixin和ModelFormMixin的多重继承,我让它们都工作了,但是当表单无效时,我没有得到验证,我只得到了“视图”对象没有属性“object\u list”

我怎样才能做到这一点

为了处理模型创建,我是否应该分割关注点并有一个单独的视图?如果是这样,如何将无效错误返回到同一模板

我的自动取款机代码:

@method_decorator(login_required, name='dispatch')
class MyView(CreateView, ListView):

    model = MyModel
    form_class = MyModelForm
    template_name = 'MyPage.html'
    success_url = reverse_lazy('my_page')
编辑:添加回溯:

Request Method: POST
Request URL: http://127.0.0.1:8000/create/

Django Version: 3.0.8
Python Version: 3.8.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'tracker']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/edit.py", line 172, in post
    return super().post(request, *args, **kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in post
    return self.form_invalid(form)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/edit.py", line 61, in form_invalid
    return self.render_to_response(self.get_context_data(form=form))
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/edit.py", line 67, in get_context_data
    return super().get_context_data(**kwargs)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/detail.py", line 100, in get_context_data
    return super().get_context_data(**context)
  File "/Users/bidu/gitfolder/expense_tracker/env/lib/python3.8/site-packages/django/views/generic/list.py", line 115, in get_context_data
    queryset = object_list if object_list is not None else self.object_list

Exception Type: AttributeError at /create/
Exception Value: 'CreateTransactionView' object has no attribute 'object_list'

您可以按照以下步骤创建自定义表单验证:

class联系人表单(forms.Form):
#一切照旧
def清洁_收件人(自身):
数据=自清理的_数据['recipients']
如果“fred@example.com“不在数据中:
raise forms.ValidationError(“您忘记了Fred!”)
返回数据
“视图”对象没有“对象列表”属性


但是,关于您遇到的这个错误,在做了一些研究之后,我认为您需要重写默认的
self.object\u list
变量,如中所述。但是,我想在您开始使用CreateView之后,您不必再处理这个问题。

很多视图都涉及表单和对象列表。与其尝试混入内容,不如将queryset添加到上下文数据中,如下所示。不要错过删除类
ListView

@方法\u装饰器(需要登录,name='dispatch') 类MyView(CreateView): model=MyModel form_class=MyModelForm 模板名称='MyPage.html' success\u url=reverse\u lazy(“我的页面”) def获取上下文数据(自身,**kwargs): kwargs['object_list']=self.model.objects.all() 返回super(MyView,self)。获取上下文数据(**kwargs)
为什么不在
ListView
页面上创建一个链接,链接到
CreateView
页面?你能发布回溯吗?在POST请求中,您可能需要添加一些设置
object\u list
的方法,但这两个类的常见方法是
get\u context\u object\u name
things@MeL如果表单验证无效,我需要能够在同一模板中获得表单验证,如果我分离视图,我不知道如何进行此操作。@IainShelvington添加了回溯使用此示例,我得到了错误
“MyView”对象没有属性“object\u list”
。如果我将
类MyView(CreateView,ListView):
更改为
类MyView(ListView,CreateView):
我在GET请求中遇到以下错误:
“MyView”对象没有属性“object”
@method_decorator(login_required, name='dispatch') class MyView(CreateView): model = MyModel form_class = MyModelForm template_name = 'MyPage.html' success_url = reverse_lazy('my_page') def get_context_data(self, **kwargs): kwargs['object_list'] = self.model.objects.all() return super(MyView, self).get_context_data(**kwargs)