如何解决如何将 post_save 信号转换为 pre_save 信号?
我已经在 Property 和 ListingDetail 模型之间建立了 OtoO 关系:
class Property(models.Model):
.
.
.
def __str__(self):
return "Property " + str(self.pk)
ListingDetail 模型:
class ListingDetial(models.Model):
property = models.OneToOneField("properties.Property",on_delete=models.CASCADE)
.
.
.
现在我不想手动选择 LocationDetail Model 中的 property 字段,而是想自动保存它。
目前我已经使用 post_save 信号来实现功能:
@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,这种方法的唯一问题是我需要将所有字段保持为可空。 我想要的是,在我创建 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。