Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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_Django Forms_Django Views - Fatal编程技术网

Python Django表单打印无错误且无效

Python Django表单打印无错误且无效,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,为了在我的网站中创建表单,我创建了一些与我的字段对应的模型。然后,我从中创建了模型表单、一些视图和模板。我的问题是,我从来没有首先看到我的表单错误,其次,这个特定字段总是有他的表单无效,即使其中有一个属性。你能解释一下我做错了什么吗 型号.py class Grapheme(models.Model): lexeme = models.ForeignKey(Lexeme, on_delete=models.CASCADE) value = models.CharField(ma

为了在我的网站中创建表单,我创建了一些与我的字段对应的模型。然后,我从中创建了模型表单、一些视图和模板。我的问题是,我从来没有首先看到我的表单错误,其次,这个特定字段总是有他的表单无效,即使其中有一个属性。你能解释一下我做错了什么吗

型号.py

class Grapheme(models.Model):
    lexeme = models.ForeignKey(Lexeme, on_delete=models.CASCADE)

    value = models.CharField(max_length=256)

    class Meta:
        verbose_name = "grapheme"
        ordering = ["value"]

    def __str__(self):
        return self.value
class GraphemeForm(forms.ModelForm):
    class Meta:
        model = Grapheme
        fields = ['value']
@login_required
def lexeme_edit_view(request, lexicon_id):
    [...]

    if request.method == 'POST':
        lexeme_form = LexemeForm(request.POST)
        grapheme_form = GraphemeForm(request.POST)
        [...]

        if grapheme_form.is_valid(): # This line fails
        [...]
forms.py

class Grapheme(models.Model):
    lexeme = models.ForeignKey(Lexeme, on_delete=models.CASCADE)

    value = models.CharField(max_length=256)

    class Meta:
        verbose_name = "grapheme"
        ordering = ["value"]

    def __str__(self):
        return self.value
class GraphemeForm(forms.ModelForm):
    class Meta:
        model = Grapheme
        fields = ['value']
@login_required
def lexeme_edit_view(request, lexicon_id):
    [...]

    if request.method == 'POST':
        lexeme_form = LexemeForm(request.POST)
        grapheme_form = GraphemeForm(request.POST)
        [...]

        if grapheme_form.is_valid(): # This line fails
        [...]
视图.py

class Grapheme(models.Model):
    lexeme = models.ForeignKey(Lexeme, on_delete=models.CASCADE)

    value = models.CharField(max_length=256)

    class Meta:
        verbose_name = "grapheme"
        ordering = ["value"]

    def __str__(self):
        return self.value
class GraphemeForm(forms.ModelForm):
    class Meta:
        model = Grapheme
        fields = ['value']
@login_required
def lexeme_edit_view(request, lexicon_id):
    [...]

    if request.method == 'POST':
        lexeme_form = LexemeForm(request.POST)
        grapheme_form = GraphemeForm(request.POST)
        [...]

        if grapheme_form.is_valid(): # This line fails
        [...]
template.html

{% if grapheme_form.non_field_errors %}
    <div class="alert alert-danger" role="alert">
        {% for error in grapheme_form.non_field_errors %}
            {{ error }}
        {% endfor %}
    </div>
{% endif %}

[...]

<div class="form-group row">
    <label for="graphemeInput" class="control-label col-lg-2">{{ grapheme_form.value.label }}</label>
    <div class="col-lg-6">
        {% if grapheme_form.is_bound %}
            {% if grapheme_form.value.errors %}
                {% for error in grapheme_form.value.errors %}
                    <div class="invalid-feedback">
                        {{ error }}
                    </div>
                {% endfor %}
            {% endif %}

            {% if grapheme_form.value.help_text %}
                <small class="form-text text-muted">{{ grapheme_form.value.help_text }}</small>
            {% endif %}
        {% endif %}

        {% render_field grapheme_form.value type="text" class+="form-control" id="graphemeInput" %}
    </div>
</div>
{%if grapheme\u form.non\u field\u errors%}
{grapheme_form.non_field_errors%}
{{error}}
{%endfor%}
{%endif%}
[...]
{{grapheme_form.value.label}
{%如果grapheme_form.is_bound%}
{%if grapheme_form.value.errors%}
{grapheme_form.value.errors%中的错误为%s}
{{error}}
{%endfor%}
{%endif%}
{%if grapheme\u form.value.help\u text%}
{{grapheme\u form.value.help\u text}
{%endif%}
{%endif%}
{%render\u field grapheme\u form.value type=“text”class+=“form control”id=“graphemeInput”%}

问题在于Grapheme型号上的lexeme外键

由于您使用的是django Modelforms,如果未将外键关系设置为
blank=True
null=True
,它将自动成为必填字段

在表单中,您声明不希望显示lexeme外键选择,因此它不会出现在表单中:

fields = ['value']
class GraphemeForm(Form):
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    lexeme = Lexeme.objects.get(id=1)
    self.fields['lexeme'].initial = lexeme

class Meta:
    model = Grapheme
    fields = ['value']
这就是为什么在表单上出现必填字段丢失错误的原因

您有两种可能的解决方案:
解决方案1
将blank=True、null=True添加到外键关系:

lexeme = models.ForeignKey(Lexeme, blank=True,null=True on_delete=models.CASCADE)

解决方案2: 初始化表单时设置词素值:

fields = ['value']
class GraphemeForm(Form):
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    lexeme = Lexeme.objects.get(id=1)
    self.fields['lexeme'].initial = lexeme

class Meta:
    model = Grapheme
    fields = ['value']

请显示视图的其余部分。您是否正在将绑定的表单传递回模板?打印grapheme\u formNo时能否显示输出?我没有上载任何内容。这里是Grapheme的_errors值:
  • 此字段是必需的。
好的,我发现如何声明lexem外键以及如何在视图中显示表单存在问题。我只是简单地更新了我的答案,我认为表单可能是有效的,因为我只给它赋值,而不是外键,但我现在明白了,谢谢!我在几个名为“value”的表单字段中也遇到了一个问题,这导致了一个数组,但这不是我最初期望的。