小编Gab*_*ram的帖子

Django Rest Framework序列化程序中的自定义错误消息

这个场景很简单:

我有一个模型,其中包含一些必填字段.让我们说其中一个是TextField不可能的blank.我还有一个ModelSerializer代表该模型的(Django Rest Framework).

当使用空字符串通过序列化程序设置该字段时,返回的错误来自模型本身(This field can't be blank).

我想只在序列化程序级别覆盖错误消息,而不需要显式地重新指定序列化程序中的每个字段(我认为这是违反DRY原则),必须validate_为每个字段编写一个方法并提高我自己的ValidationError或者必须更改Model级别中的错误消息(因为有时错误消息的上下文对我的用例很重要,因此应该给出错误消息).

换句话说,有没有办法在序列化程序级别覆盖错误消息,就像它对于ModelForm:

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        error_messages = {"field1": {"required": _("For some reason this is a custom error message overriding the model's default")}}
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

26
推荐指数
6
解决办法
2万
查看次数

使用RunPython进行更改的Django迁移

我想在我的一个模型中更改一个外键,该模型当前具有NULL值,不能为空.

null=True从我的字段中删除并运行makemigrations

因为我正在改变一个已经包含该字段中包含NULL值的行的表,所以我被要求立即提供一次性值或编辑迁移文件并添加RunPython操作.

我的RunPython操作在AlterField操作之前列出,并对此字段执行所需的更新,因此它不包含NULL值(仅包含已包含NULL值的行).

但是,迁移仍然失败并出现此错误: django.db.utils.OperationalError: cannot ALTER TABLE "my_app_site" because it has pending trigger events

这是我的代码:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations

def add_default_template(apps, schema_editor):
    Template = apps.get_model("my_app", "Template")
    Site = apps.get_model("my_app", "Site")

    accept_reject_template = Template.objects.get(name="Accept/Reject")
    Site.objects.filter(template=None).update(template=accept_reject_template)    

class Migration(migrations.Migration):

    dependencies = [
        ('my_app', '0021_auto_20150210_1008'),
    ]

    operations = [
        migrations.RunPython(add_default_template),
        migrations.AlterField(
            model_name='site',
            name='template',
            field=models.ForeignKey(to='my_app.Template'),
            preserve_default=False,
        ),
    ]
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,当字段被更改为不可为空但字段包含空值时,可能会发生此错误.在这种情况下,我能想到为什么会发生这种情况的唯一原因是因为RunPython操作事务在运行之前没有"提交"数据库中的更改AlterField.

如果这确实是原因 - 我如何确保更改反映在数据库中?如果不是 …

django django-migrations

20
推荐指数
2
解决办法
8300
查看次数