Django -这是必填字段错误

5lhxktic  于 2022-12-20  发布在  Go
关注(0)|答案(2)|浏览(102)

我是Django的新手,尝试将表单中的一些数据保存到模型中,我想插入到两个有外键约束关系的模型中(即Idea和IdeaUpvotes),即从html模板到视图。
我的提交代码是:

def submitNewIdea(request):
    #get the context from the request
    context = RequestContext(request)

    print(context)

    #A HTTP POST?
    if request.method == 'POST':
        form = submitNewIdeaForm(request.POST)

        # Have we been provided with a valid form?
        if form.is_valid():
            # Save the new Idea to the Idea model

            print(request.POST.get("IdeaCategory"))
            print(request.POST.get("IdeaSubCategory"))

            i = Idea(   idea_heading = form["idea_heading"].value()
                        ,idea_description = form["idea_description"].value()
                        ,idea_created_by = form["idea_created_by"].value()
                        ,idea_votes = form["idea_votes"].value()
                        ,idea_category = request.POST.get("IdeaCategory") #value from dropdown
                        ,idea_sub_category = request.POST.get("IdeaSubCategory")  #value from dropdown
                     )

            i.save()
            # get the just saved id

            print(Idea.objects.get(pk = i.id))

            iu = IdeaUpvotes(idea_id = Idea.objects.get(pk = i.id)
                            ,upvoted_by = form["upvoted_by"].value()
                            ,upvoted_date = timezone.now() )

            iu.save()
            form.save(commit = True)
            # Now call the index() view.
            # The user will be shown the homepage.
            return index(request)
        else:
            # The supplied form contained errors - just print them to the terminal.
            print (form.errors)
    else:
        # If the request was not a POST, display the form to enter details.
        form = submitNewIdeaForm()

    # Bad form (or form details), no form supplied...
    # Render the form with error messages (if any).
    return render(request,'Ideas/Index.html',{'form' :form})

form.py --〉
类提交新的理想表单(表单.模型表单):

idea_heading = forms.CharField(label = "idea_heading",max_length =1000,help_text= "Please enter the idea heading.")
idea_description= forms.CharField(label = "idea_description",max_length =1000,help_text= "Please enter the idea description.",widget=forms.Textarea)
idea_created_by=forms.CharField(max_length =200, widget = forms.HiddenInput(), initial='wattamw')
idea_votes = forms.IntegerField(widget=forms.HiddenInput(), initial=1)
upvoted_by=forms.CharField(max_length =200, widget = forms.HiddenInput(), initial='abcde')

"""
#commented code

#idea_category_name = forms.CharField(label = "idea_category_name",max_length =250,help_text= "Please select an Idea Category.")
#idea_sub_category = forms.CharField(label = "idea_sub_category",max_length =250,help_text= "Please select an Idea Sub Category.")

idea_category_name = forms.ModelChoiceField(
                    queryset = IdeaCategory.objects.all(),
                    widget=autocomplete.ModelSelect2(url='category-autocomplete'))

idea_sub_category = forms.ModelChoiceField(
                    queryset = IdeaSubCategory.objects.all(),
                    widget = autocomplete.ModelSelect2(
                        url='subcategory-autocomplete',
                        forward = (forward.Field('idea_category_name','id'),)))
"""

class Meta:
    model = Idea
    fields = ('idea_heading','idea_description','idea_created_by','idea_votes','idea_category_name','idea_sub_category')

class Meta:
    model = IdeaUpvotes
    fields = ('upvoted_by',)

def __init__(self,*args,**kwargs):
    super(submitNewIdeaForm,self).__init__(*args,**kwargs)
    self.fields['idea_category_name'] = forms.ModelChoiceField(
                                        queryset = IdeaCategory.objects.all(),
                                        widget=autocomplete.ModelSelect2(url='category-autocomplete'))
    self.fields['idea_sub_category'] = forms.ModelChoiceField(
                                    queryset = IdeaSubCategory.objects.all(),
                                    widget = autocomplete.ModelSelect2(
                                    url='subcategory-autocomplete',
                                    forward = (forward.Field('idea_category_name','id'),)))

我可以打印这些值并看到它们已被传递,但我仍然得到以下错误:
Error Description
我已经删除了对表的所有外键引用,字段是简单的字符字段。
请帮帮我。
谢谢。

os8fio9y

os8fio9y1#

首先,您的表单验证失败。在我看来,您的表单模板可能有错误。
第二件事是你没有正确使用Django表单,你需要做的就是使用ModelForm并让表单的save方法为你创建对象,你需要做的就是:
1.将您的SubmitNewIdeaFormIdea型号关联:

# forms.py
    class SubmitNewIdeaForm(ModelForm):
        class Meta:
        model = Idea
        fields = (
            'idea_heading',
            'idea_description',
            'idea_created_by',
            'idea_votes',
            'idea_category',
            'idea_sub_category'
        )

1.呈现窗体

#form_template.html
<form action="{% url 'your_url' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

1.最后,jsut检查表单是否有效,并调用form.save(),如下所示:

def submitNewIdea(request):
    if form.is_valid():
        form.save()

够了!希望我帮到你了。
干杯!

pgvzfuti

pgvzfuti2#

Finished = models.IntegerField('Finished percentage', error_messages={'required':''})

对我有用。

相关问题