gpt4 book ai didi

.update_or_create() 不使用 Django 1.8 自定义管理器和 .create() 方法

转载 作者:行者123 更新时间:2023-12-04 05:39:27 26 4
gpt4 key购买 nike

我有两个应该始终一起创建的相关实例。我想在不使用信号或覆盖模型的 save() 的情况下执行此操作方法。

class Car(models.Mode):
make = models.CharField(max_length=32)
model = models.CharField(max_length=32)

class Meta:
unique_together = ('make', 'model',)

objects = CarManager()

class CarProfile(models.Model):
car = models.OneToOneField(Car)
last_checkup = models.DateTimeField(blank=True, null=True)

我创建了一个覆盖 models.Manager.create() 的自定义 CarManager 以确保在创建 Car 时创建 CarProfile:
class CarManager(models.Manager):
def create(self, **kwargs):
with transaction.atomic():
car = self.model(**kwargs)
car.save(force_insert=True)
CarProfile.objects.create(car=car)
return car

当我调用 Car.objects.create(make='Audi', model='R8') , 一个新的 Car 实例和它对应的 CarProfile 就按预期创建了。但是,当我尝试使用 Car.objects.update_or_create(make='Audi', model='R8') 创建新车时或 Car.objects.get_or_create(make='Audi', model='R8') ,在这两种情况下,都会创建一个 Car 实例,但没有创建相应的 CarProfile。

为什么不 update_or_create get_or_create 当我在自定义 create() method 中指定该行为时,生成预期的 CarProfile 实例?

似乎这两种方法都在调用 create()来自 QuerySet类而不是我的自定义类。

最佳答案

只是想澄清一下这个问题在 Django v1.8a1 中得到了解决。所以现在两个 get_or_createupdate_or_create将调用经理create方法如预期。
https://github.com/django/django/commit/0dce44e16be2d4850120cd333380ab9171c5964a

关于.update_or_create() 不使用 Django 1.8 自定义管理器和 .create() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33406800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com