簡體   English   中英

Django 創建唯一的外鍵對象

[英]Django create unique foreign key objects

我的 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都與同一個PNotification對象鏈接。 我認為default的方法調用會為每個現有的Product執行? 如何為每個現有Product提供唯一的PNotification對象?

我還懷疑您的設置會創建一個新的 PNotification。 看起來好像是在類聲明而不是實例創建上調用該方法。

也許這里覆蓋的保存方法是更好的方法? 請注意,您需要稍微更改OneToOneField的邏輯:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM