Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Python Django表单集模型未正确创建_Python_Django - Fatal编程技术网

Python Django表单集模型未正确创建

Python Django表单集模型未正确创建,python,django,Python,Django,我的代码: # forms.py class PopupForm(forms.ModelForm): class Meta: model = Popup exclude = () class LiveStreamForm(forms.ModelForm): class Meta: model = LiveStream exclude = ("date_created",) PopupFo

我的代码:

# forms.py

class PopupForm(forms.ModelForm):

    class Meta:
        model = Popup
        exclude = ()

class LiveStreamForm(forms.ModelForm):

    class Meta:
        model = LiveStream
        exclude = ("date_created",)

PopupFormSet = inlineformset_factory(LiveStream,Popup,exclude=(),extra=3)

# models.py

class Popup(models.Model):
    total_seconds_to_initiate = models.BigIntegerField()
    livestream = models.ForeignKey('LiveStream', on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return "%s seconds, ls:%s" % (self.total_seconds_to_initiate, self.livestream)

    def get_absolute_url(self):
        return reverse("livestream_detail", kwargs={
            'pk': str(self.livestream.id),})

class LiveStream(models.Model):
    youtube_id = models.CharField(max_length=255, blank=True, null=True)
    date_created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "%s (%s)" % (self.youtube_id, self.id)

    def get_absolute_url(self):
        return reverse("livestream_detail", kwargs={
            'pk': str(self.id),})

# views.py

    
class LiveStreamCreateView(CreateView):
    model = LiveStream
    form_class = LiveStreamForm
    template_name = 'livestream/livestream_create.html'

    def get(self, request, *args, **kwargs):
        """
        Handles GET requests and instantiates blank versions of the form
        and its inline formsets.
        """
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        popup_form_set = PopupFormSet()
        return self.render_to_response(
            self.get_context_data(form=form,
                                  popup_form_set=popup_form_set,))

    def post(self, request, *args, **kwargs):
        """
        Handles POST requests, instantiating a form instance and its inline
        formsets with the passed POST variables and then checking them for
        validity.
        """
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        popup_form_set = PopupFormSet(self.request.POST)
        if (form.is_valid() and popup_form_set.is_valid()):
            return self.form_valid(form, popup_form_set)
        else:
            return self.form_invalid(form, popup_form_set)

    def form_valid(self, form, popup_form_set):
        """
        Called if all forms are valid. Creates a Recipe instance along with
        associated Ingredients and Instructions and then redirects to a
        success page.
        """
        f = form.save(commit=False)
        self.object = form.save()
        popup_form_set.instance = self.object
        popup_form_set.save()
        return HttpResponseRedirect(self.get_success_url())

    def form_invalid(self, form, popup_form_set):
        """
        Called if a form is invalid. Re-renders the context data with the
        data-filled forms and errors.
        """
        return self.render_to_response(
            self.get_context_data(form=form,
                                  popup_form_set=popup_form_set,))


# livestream_create.html

<form method="POST">
{% csrf_token %}

Enter the Channel ID of the Livestream Here.
{{form}}<br>

{{ popup_form_set.management_form }}
{{ popup_form_set.non_form_errors }}
{% for popup_form in popup_form_set %}
    {{popup_form}}<br>
{% endfor %}
<input type="submit" value="Save">
</form>
#forms.py
类弹出窗体(forms.ModelForm):
类元:
模型=弹出窗口
排除=()
类LiveStreamForm(forms.ModelForm):
类元:
模型=实时流
排除=(“创建日期”)
PopupFormSet=inlineformset_工厂(LiveStream、Popup、exclude=()、extra=3)
#models.py
类弹出窗口(models.Model):
启动的总秒数=models.BigIntegerField()
livestream=models.ForeignKey('livestream',on_delete=models.CASCADE,blank=True,null=True)
定义(自我):
返回“%s秒,ls:%s”%(self.total\u秒到\u initiate,self.livestream)
def get_绝对_url(自身):
返回反向(“livestream_细节”,kwargs={
“pk”:str(self.livestream.id),})
类LiveStream(models.Model):
youtube_id=models.CharField(最大长度=255,空白=True,空=True)
date\u created=models.DateTimeField(auto\u now\u add=True)
定义(自我):
返回“%s(%s)”%(self.youtube\u id,self.id)
def get_绝对_url(自身):
返回反向(“livestream_细节”,kwargs={
“pk”:str(self.id),})
#views.py
类LiveStreamCreateView(CreateView):
模型=实时流
form_class=LiveStreamForm
template_name='livestream/livestream_create.html'
def get(自我、请求、*args、**kwargs):
"""
处理GET请求并实例化表单的空白版本
以及它的内联表单集。
"""
self.object=None
form\u class=self.get\u form\u class()
表单=自我。获取表单(表单类)
popup_form_set=PopupFormSet()
返回self.render\u to\u响应(
self.get\u context\u数据(form=form,
popup_form_set=popup_form_set,))
def post(自我、请求、*args、**kwargs):
"""
处理POST请求,实例化表单实例及其内联
带有传递的POST变量的表单集,然后检查它们的
有效性
"""
self.object=None
form\u class=self.get\u form\u class()
表单=自我。获取表单(表单类)
popup\u form\u set=PopupFormSet(self.request.POST)
如果(form.is\u valid()和popup\u form\u set.is\u valid()):
返回self.form\u valid(表单、弹出式表单集)
其他:
返回self.form\u无效(表单、弹出式表单集)
def表单有效(自身、表单、弹出式表单集):
"""
如果所有表单都有效,则调用。创建配方实例以及
关联的成分和说明,然后重定向到
成功页面。
"""
f=表单.save(提交=False)
self.object=form.save()
popup\u form\u set.instance=self.object
弹出表单集合。保存()
返回HttpResponseRedirect(self.get_success_url())
def表单无效(自身、表单、弹出表单集):
"""
如果表单无效,则调用。使用
填写数据的表格和错误。
"""
返回self.render\u to\u响应(
self.get\u context\u数据(form=form,
popup_form_set=popup_form_set,))
#livestream_create.html
{%csrf_令牌%}
在此处输入Livestream的频道ID。
{{form}}
{{popup_form_set.management_form} {{popup_form_set.non_form_errors} {popup_form_set%中的popup_form的百分比} {{popup_form}}
{%endfor%}

我希望用户能够在创建Livestream对象的同一页面上创建弹出对象。目前,表单看起来应该可以正常工作:有一个Livestream Youtube ID字段和3个弹出总秒数到初始化字段。应该做的是,我输入一个youtube ID,然后输入一个任意数字(=很可能你的表单是无效的(),它不会创建模型。你可以通过在任何地方添加
print()
来确认这一点,打印两个
弹出表单集。是否有效()
表单。是否有效()
弹出表单集。错误
表单错误
调试101。这可能有助于了解实际情况。弹出表单集是有效的。表单也是有效的。
请求.POST
POST()中包含什么?