如何在 get_or_create 保存到数据库之前调用一个干净的方法?

Ale*_*lex 5 python django django-models

我在 Django 中有一个模型,其中一些数据经常无效。通常我会调用clean()我为处理这些情况而编写的方法,但是,get_or_create()似乎save()在我有机会调用clean().

get_or_create()尝试写入数据库之前如何清理我的数据?

这是我的模型的相关部分:

class Article(models.Model):
    optional_attribute = models.CharField(max_length = 250)

    def clean(self):
        if not self.optional_attribute:
            self.optional_attribute = 'Default'
Run Code Online (Sandbox Code Playgroud)

dge*_*gel 5

重写该save方法可能更合适:

class Article(models.Model):
    optional_attribute = models.CharField(max_length = 250)

    def save(self, *args, **kwargs):
        if not self.optional_attribute:
            self.optional_attribute = 'Default'
        super(Article, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用pre_save信号处理程序:

from django.db.models.signals import pre_save

class Article(models.Model):
    optional_attribute = models.CharField(max_length = 250)

    @classmethod
    def pre_save_handler(cls, sender, instance, **kwargs):
        if not instance.optional_attribute:
            instance.optional_attribute = 'Default'

pre_save.connect(Article.pre_save_handler, sender=Article)
Run Code Online (Sandbox Code Playgroud)

如果您想保留您的clean方法,您可以简单地使用其中一种技术并clean从内部调用您的方法。