Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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 save()方法时更改输入字段_Python_Django - Fatal编程技术网

Python 如何在重写django save()方法时更改输入字段

Python 如何在重写django save()方法时更改输入字段,python,django,Python,Django,假设我有以下代码: class MyModel(models.Model): ... ... def save(self, *args, **kwargs): # pre-save edits can go here... super(MyModel, self).save(*args, **kwargs) 当我创建并保存一个模型MyModel(诸如此类)时,有可能 其中一个输入字段为“无”。在重写的save方法中,目标是检查字段

假设我有以下代码:

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

    def save(self, *args, **kwargs):
        # pre-save edits can go here...
        super(MyModel, self).save(*args, **kwargs)
当我创建并保存一个模型MyModel(诸如此类)时,有可能 其中一个输入字段为“无”。在重写的save方法中,目标是检查字段是否为none,如果为none,则将其更改为其他默认值

输入字段是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\u 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

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

我收到一个编译错误,你确定sender=MyModel不应该是sender='MyModel'吗?谢谢,如果还有人能帮忙,还是有点好奇。在使用save()方法时,在哪里可以访问实例字段?是用args还是kwargs?