我的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
对象?
答案 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)