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?