在将实例保存到数据库之前如何返回实例?

在下面是类似于我要完成的工作:

class Personne(models.Model):
    nom = models.CharField(max_length=100, verbose_name="Origem")

    def save(self, *args, **kwargs):
        found = None
        try:
            found = Personne.objects.get(nom=self.nom)
            super(Personne, self).save(*args, **kwargs)
        except AudioFile.DoesNotExist:
            return found


def test_personne_is_the_same(self):
    p1 = Personne.objects.create(nom="Malcom X")
    p2 = Personne.objects.create(nom="Malcom X")
    self.assertEqual(p1, p2)


断言给出:
p1!=无

最佳答案

有多种原因导致您的save()方法无法按书面方式工作。 (对于其中一个,不使用save()的返回值,因此return found无效。)

但是没有理由尝试自己重新发明:摆脱自定义save(),而只需使用get_or_create()即可:

def test_personne_is_the_same(self):
    p1, _ = Personne.objects.get_or_create(nom="Malcom X")
    p2, _ = Personne.objects.get_or_create(nom="Malcom X")
    self.assertEqual(p1, p2)

关于python - 在Django中,保存到数据库时如何返回现有模型实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18604632/

10-11 00:35