首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ValidationError w/ ModelAdmin _view为DjangoAdmin时抛出ModelAdmin

如何在ValidationError w/ ModelAdmin _view为DjangoAdmin时抛出ModelAdmin
EN

Stack Overflow用户
提问于 2018-03-26 17:00:04
回答 1查看 915关注 0票数 2

我有个模特

代码语言:javascript
复制
class Group(models.Model):
    active = models.BooleanField(null=False, blank=False, default=True)

以及它的管理页面

代码语言:javascript
复制
class GroupAdmin(admin.ModelAdmin):
    change_form_template = "admin/group/group.html"
    form = GroupAdminForm

    def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context['group_data'] = self.get_info(object_id)
        return super(GroupAdmin, self).change_view(
            request, object_id, form_url, extra_context=extra_context,
        )

class GroupAdminForm(ModelForm):
    class Meta:
        model = Group
        fields = '__all__'

    def clean_active(self):
        active = self.cleaned_data['active']

        if 'active' in self.changed_data and not active and OtherCondition:
            raise ValidationError('Group must stay active because of OtherCondition')
        return active

它需要change_view模板。

由于change_view模板,验证错误不会出现。

如何抛出验证错误并将其显示在Django管理员上?是否有一种使用ValidationError来实现此操作的方法?是通过更改change_view模板吗?

  • 当我将它抛到模型的Group.save()上时,它会破坏页面,而不是不保存并告诉用户修复错误。
  • 起初,我没有使用AdminForm,但使用它意味着验证正在运行,它请求更改(请更正下面的错误。),但它没有显示ValidationError消息。

这个问题类似,但推荐消息,但我想知道是否有其他方法:从自定义视图引发django管理验证错误

我并不认为我具体地包含了字段错误,但我认为应该通过django提供的html来包含它们:

表格

代码语言:javascript
复制
{% block field_sets %}
{% for fieldset in adminform %}
  {% include "admin/includes/fieldset.html" %}
{% endfor %}
{% endblock %}

admin/include/admin set.html{{ line.errors }}。也许这与将错误传递给change_view有关?

group.html按要求。

代码语言:javascript
复制
{% extends "admin/change_form.html" %}
{%  block field_sets %}
    {# stuff #}
    {{ block.super }}
{%  endblock %}

{% block inline_field_sets %}
{% for inline_admin_formset in inline_admin_formsets %}
    {# stuff #}
{% endfor %}
{% endblock %}

{# M2M Preview #}
{% block after_related_objects %}
    {# stuff #}
{%  endblock %}
EN

回答 1

Stack Overflow用户

发布于 2018-04-09 13:21:42

在这种情况下,我认为表单验证是个好主意。

forms.py

代码语言:javascript
复制
class YourForm(forms.ModelForm):

    def clean(self):
        super(YourForm, self).clean()
        data1 = self.cleaned_data.get('data1')
        data2 = self.cleaned_data.get('data2')

        # Add validation condition here
        # if validation error happened you can raise the error 
        # and attach the error message with the field you want.

        self.add_error('field_name', 'error message')

admin.py

代码语言:javascript
复制
 class YourAdminClass(admin.ModelAdmin):
     form = YourForm
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49496818

复制
相关文章

相似问题

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