首页 > 解决方案 > Django formview form_valid,表单没有属性`instance`

问题描述

我正在尝试使用FormView该类创建一个表单视图。它可以很好地显示发布表单,但是在发布数据form_valid函数时会被调用,在这里我得到一个错误:

AttributeError: 'GameForm' object has no attribute 'instance'

据我所知,form_valid 方法中传递的表单对象不包含实例,但示例表明它是可能的。我错过了什么?

视图.py

from django.shortcuts import render, redirect
from django.views.generic import (ListView, DetailView)
from django.views.generic.edit import FormView

from .models import Game
from .forms import GameForm


# ... Other views

class GameCreateView(FormView):
    template_name = 'games/game_form.html'
    form_class = GameForm
    success_url = '/'

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        form.instance.author = self.request.user
        return super().form_valid(form)

表格.py

class GameForm(forms.ModelForm):
    name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Title'}),
                           label="Spel naam")
    description = forms.CharField(required=False,
                                  widget=forms.Textarea)
    materials = forms.CharField(required=False,
                                widget=forms.Textarea)
    duration_min = forms.IntegerField(required=False, label="Min. tijd")
    duration_max = forms.IntegerField(required=False, label="Max. tijd")
    group_size_min = forms.IntegerField(required=False, label="Min. aantal personen")
    group_size_max = forms.IntegerField(required=False, label="Max. aantal personen")

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            'name',
            Row(
                Column('duration_min', css_class='form-group col-md-2 mb-0'),
                Column('duration_max', css_class='form-group col-md-2 mb-0'),
                css_class='form-row'
            ),
            Row(
                Column('group_size_min', css_class='form-group col-md-2 mb-0'),
                Column('group_size_max', css_class='form-group col-md-2 mb-0'),
                css_class='form-row'
            ),
            'description',
            'materials',

            Submit('submit', 'Post')
        )

网站日志

AttributeError at /game/new/
'GameForm' object has no attribute 'instance'
Request Method: POST
Request URL:    http://127.0.0.1:8000/game/new/
Django Version: 3.1.3
Exception Type: AttributeError
Exception Value:    
'GameForm' object has no attribute 'instance'

Django 版本 = 3.1.3

提前致谢!

编辑添加 forms.py

标签: pythondjangodjango-forms

解决方案


推荐阅读