具有复合主键的Django更新模型

2024-10-02 14:29:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图更新一个模型,有两个主键。在

由于django没有正式支持它,所以我使用了变通方法:

class myModel(models.Model):
    class Meta:
        unique_together = (('key1', 'key2'),)

    key1= models.IntegerField(blank=False, primary_key=True)
    key2= models.CharField(blank=False, max_length=30)
    attr3 = models.CharField(max_length=30)
    attr4 = models.CharField(max_length=30)

但每当我试图更新现有对象时,都会出现以下错误:

^{pr2}$

我尝试了以下方法来更新我的模型:

myModel.objects.update_or_create(
    key1=kw1, 
    key2= kw2,
    defaults={
    'attr3':attr3_str,
    'attr4':attr4_str,
    })

以及以下内容:

defaults={
    'attr3':attr3_str
    'attr4':attr4_str,
    }
try:
    obj = myModel.objects.get(key1=kw1, key2=kw2)
    for key, value in defaults:
        settatr(obj, key, value)
    obj.save()
except myModel.DoesNotExist:
    print("DOESNT EXISIT")
    new_values = {'key1': kw1, 'key2': kw2}
    new_values.update(defaults)
    obj = myModel(**new_values)
    obj.save()

有什么办法可以更新我的模型而不出现完整性错误吗?在


Tags: key模型objmodelslengthmaxmymodelcharfield
1条回答
网友
1楼 · 发布于 2024-10-02 14:29:18

我不知道这个问题的原因是什么

class myModel(models.Model):
    class Meta:
        unique_together = (('key1', 'key2'),)

    key1= models.IntegerField()
    key2= models.CharField(max_length=30)
    attr3 = models.CharField(max_length=30)
    attr4 = models.CharField(max_length=30)

^{pr2}$

谢谢你的帮助!在

相关问题 更多 >