假设我有以下代码:
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/