![](/img/trans.png)
[英]Django: Force a field to be unique for all model objects with the same foreign key
[英]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.