python - 如何在覆盖 django save() 方法时更改输入字段

标签 python django

假设我有以下代码:

 class MyModel(models.Model):
     ...
     ...

    def save(self, *args, **kwargs):
        # pre-save edits can go here...
        super(MyModel, self).save(*args, **kwargs)

当我创建并保存模型 MyModel(blah, blah, blah) 时,有可能 输入字段之一是“无”。在覆盖的保存方法中,目标是检查字段是否为空,如果是,则将其更改为其他默认值。

输入域是args还是kwargs?覆盖 save() 甚至是执行此操作的正确方法吗?

我是这样想的:

    def save(self, *args, **kwargs):
        if 'username' in args and args['username'] is None:
              args['username'] = some_default_value
        super(MyModel, self).save(*args, **kwargs)

那么输入参数在哪里呢? args* 或 **kwargs,谢谢。

最佳答案

我认为最好使用 pre_save 信号来查看输入值是否为 None:

from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver

class MyModel(models.Model):
    field1 = models.TextField()
    field2 = models.IntegerField()

@receiver(pre_save, sender=MyModel)
def mymodel_save_handler(sender, instance, *args, **kwargs):
     if instance.field1 is None or instance.field1 == "":
         instance.field1 = default_value

如果您更喜欢覆盖 save 方法,您可以使用 self 访问 model fields

 def save(self, *args, **kwargs):
        if self.username is None:
              self.username = some_default_value
        super(MyModel, self).save(*args, **kwargs)

关于python - 如何在覆盖 django save() 方法时更改输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767613/

相关文章:

python - 找到另一个具有目标路径的文件 - 那个文件在哪里?

python - 单击类名为 selenium 的元素

python - 使用云存储时在 dev_appserver 上获取访问 token RefreshError 'invalid_grant'

Python异常处理: Check return value of function

python - 在进行在线预测时,tensorflow-serving 或托管的 Google ML 是否允许使用第 3 方库进行数据预处理? ( python 3)

Django:调用没有url映射的 View 函数

python - 转换 python 文件中的空格?

django - 真的有基本的 Django 电子商务吗?我从哪说起呢

python - 重写 save 方法以在 Django 中创建第二个自动递增字段

django - 即使在 Amazon Linux 上关闭 shell 后如何运行 django web 服务器