如何将post_save转换为pre_save信号



我已经在Property和ListingDetail Model之间建立了OtoO关系:

class Property(models.Model):
.
.
.
def __str__(self):
return "Property " + str(self.pk)

列表详细型号:

class ListingDetial(models.Model):
property = models.OneToOneField("properties.Property", on_delete=models.CASCADE)
.
.
.

现在,我不想手动选择LocationDetail Model中的属性字段,而是想自动保存它。

目前我已经使用postrongave信号来实现功能:

@receiver(post_save, sender=Property)
def ensure_sub_section_model_exists(sender, **kwargs):
if kwargs.get('created', False):
ListingDetial.objects.get_or_create(property=kwargs.get('instance'))

但这种方法的问题是,每次创建Property实例时,它都会创建一个ListingDetail,这种方法唯一的问题是我需要保持所有字段都可以为null。我想要的是在创建ListingModel之后,属性存储与ListingModel的PK相同的值。

如果您首先创建Property,然后将ListingDetail添加到其中,那么最好在Property模型中包含OneToOneField。而且不需要信号来做到这一点。

class Property(models.Model):
listing_detail = models.OneToOneField("properties.ListingDetail", on_delete=models.CASCADE)
def save(self, *args, **kwargs):
if not self.pk:
self.listing_detail = ListingDetail.objects.create()
super().save(*args, **kwargs)

最新更新