Django创建唯一的外键对象

时间:2020-11-09 15:17:07

标签: python django

我的Django模型中有一个FK,对于迁移之前存在的每个现有模型,它都必须是唯一的:

class PNotification(models.Model):
    notification_id = models.AutoField(primary_key=True, unique=True)
    # more fields to come

def get_notifications():
    noti = PNotification.objects.create()
    logger.info('Created notifiactions')
    logger.info(noti.notification_id)
    return noti.notification_id

class Product(models.Model):
        notification_object = models.ForeignKey(PNotification, on_delete=models.CASCADE, default=get_notifications)

迁移时,我将三个PNotification对象保存到数据库中,但是每个现有的Product都与notification_id = 1链接,因此每个现有的Product都与同一个{{ 1}}对象。我认为PNotification中的方法调用将针对每个现有的default执行吗? 如何给每个现有的Product一个唯一的Product对象?

1 个答案:

答案 0 :(得分:0)

我还怀疑在设置时会创建新的PNotification。看起来好像是在类的decleration而不是实例创建上调用该方法。

也许重写的保存方法在这里是更好的方法?请注意,您需要为OneToOneField s稍微更改逻辑:

class Product(models.Model):

    ...

    def save(self, *args, **kwargs):

        if not self.notification_object.all():

            notification = PNotification.objects.create()

            self.notification_object.add(notification)
                
        super(Product, self).save(*args, **kwargs)