首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django窗体不打印错误,且无效。

Django窗体不打印错误,且无效。
EN

Stack Overflow用户
提问于 2018-06-11 09:19:08
回答 1查看 530关注 0票数 1

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

models.py

代码语言:javascript
复制
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

forms.py

代码语言:javascript
复制
class GraphemeForm(forms.ModelForm):
    class Meta:
        model = Grapheme
        fields = ['value']

views.py

代码语言:javascript
复制
@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

代码语言:javascript
复制
{% 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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-11 09:53:17

问题是你的字母外键在你的字母模型上。

由于您使用的是django,如果您不将blank=Truenull=True设置为一个外键关系,它将自动成为一个强制字段。

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

代码语言:javascript
复制
fields = ['value']

这就是为什么要在表单上获得所需字段丢失错误的原因。

您有两个可能的解决方案:

解决方案1

将blank=True、null=True添加到外键关系中:

代码语言:javascript
复制
lexeme = models.ForeignKey(Lexeme, blank=True,null=True on_delete=models.CASCADE)

解决方案2:当您对表单进行分类时,设置lexeme值:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50794276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档