我正在尝试将我的数据库从postgres迁移到mysql。下面是Customdata模型。
user = models.ForeignKey(User, related_name='customdatas')
call_uuid = models.CharField(max_length=50, null=True, blank=True, editable=False)
phone_number = models.CharField(max_length=15)
name = models.CharField(max_length=50, db_index=True)
type = models.CharField(max_length=10, choices=TYPE_CHOICES,
default='xml')
appcode = models.CharField(max_length=10, choices=APPCODE_CHOICES,
null=True, blank=True)
value = JSONField(default=[])
remark = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
expiry_time = models.DateTimeField(null=True, blank=True, db_index=True)
reference_type = models.ForeignKey(ContentType, null=True, blank=True)
reference_id = UUIDField('Reference ID', null=True, blank=True)
reference = generic.GenericForeignKey('reference_type', 'reference_id')
当我使用下面的代码片段创建条目时,我遇到了GenericForeignKey字段“引用”未更新的问题。休息每一个价值都非常好。
>> c = Customdata.objects.create(call_uuid=session_uuid + '__'+ str(i),
user=order.user, name="voicemail", phone_number=phone_number,
type='url', value=data, remark=events['recordingFile'][i],
reference=order)
>> c.reference
[Blank value returned]
但是在创建之后如果我执行更新,则会保存该值。
>> c.reference = order
>> c.save()
>> c.reference
kdfj-kddl-3933kd-3ed8dl
我不知道为什么“reference”字段没有使用create保存,但在再次更新后工作正常。此代码用于与postgres一起使用。
答案 0 :(得分:0)
我通过更改自定义UUIDField的pre_save函数解决了这个问题。
>> def pre_save(self, model_instance, add):
>> old_val = getattr(model_instance, self.attname)
>> if (self.primary_key and add) and (old_val is None or old_val=="" ):
>> value = str(uuid.uuid4())
>> setattr(model_instance, self.attname, value)
>> return value
>> else:
>> return old_val
如果是postgres,如果未设置旧值,则返回为None,但在mysql的情况下,它是“”。这就是创建和保存时不同行为的原因。