首页 > 解决方案 > 如何使用 Django 为现有表创建一对一字段?

问题描述

我们已经有一个模型,比方说,Product. 我们想将其扩展为“一对一关系”,比方说ProductDetails。如何以这种方式自动创建Product模型行的每个现有行ProductDetails?带有一些默认值。

Django 提供这样的工具吗?这项任务对我来说似乎很正常,但我找不到任何本机解决方案。

标签: djangodatabase

解决方案


这是您问题的答案:https ://stackoverflow.com/a/63323183/10602634

django 信号可用于在对象更改时创建、更新或删除。

在你的情况下:

from django.dispatch.dispatcher import receiver

class ProductDetails(models.Model):
    product =  models.OneToOneField(Product, on_delete= models.CASCADE)
    '''rest'''

使用接收器包装函数

@receiver(post_save, sender=Product)
def add_details(sender, instance, created, **kwargs):
    if created:
        ProductDetails.objects.create(product=instance)
        return ProductDetails

接收器上的 django 文档涵盖主题https://docs.djangoproject.com/en/3.2/topics/signals/#receiver-functions


推荐阅读