Django 更新查询集以更改 ForeignKey 的 ID
Django update on queryset to change ID of ForeignKey
我正在尝试更新一堆对象的 ID 以及引用这些对象的相关 table。
class Test(models.Model):
id=models.IntegerField(primary_key=True)
class Question(models.Model):
id=models.AutoField(primary_key=True)
test=models.ForeignKey('Test',db_column='testId')
d={1:2,5:10}
for fr,to in d.items():
Test.objects.filter(id=fr).update(id=to)
Question.objects.filter(test_id=fr).update(test_id=to)
我已尝试 test_id
、test__id
和 testId
,但收到此错误消息:
django.db.models.fields.FieldDoesNotExist: Question has no field named 'test_id'
目前可以吗?
编辑:我宁愿不必为每个 id 更改加载 Test
对象。
您无法使用 ID 更新 ForeignKey 字段。您应该传递模型对象来更新它。你可以试试
for fr,to in d.items():
Test.objects.filter(id=fr).update(id=to)
test_obj = Test.objects.get(id=to)
Question.objects.filter(test_id=fr).update(test=test_obj)
更新:
从 Django 1.8 开始,您可以使用 id
的 ForeignKey 对象来更新对象。
for fr,to in d.items():
Test.objects.filter(id=fr).update(id=to)
Question.objects.filter(test_id=fr).update(test_id=to)
在 Django 1.8 中实现
用法:
Bar.objects.filter(pk=foo.id).update(a_id=bar.id)
Bar.objects.filter(pk=foo.id).update(a=bar.id)
我正在尝试更新一堆对象的 ID 以及引用这些对象的相关 table。
class Test(models.Model):
id=models.IntegerField(primary_key=True)
class Question(models.Model):
id=models.AutoField(primary_key=True)
test=models.ForeignKey('Test',db_column='testId')
d={1:2,5:10}
for fr,to in d.items():
Test.objects.filter(id=fr).update(id=to)
Question.objects.filter(test_id=fr).update(test_id=to)
我已尝试 test_id
、test__id
和 testId
,但收到此错误消息:
django.db.models.fields.FieldDoesNotExist: Question has no field named 'test_id'
目前可以吗?
编辑:我宁愿不必为每个 id 更改加载 Test
对象。
您无法使用 ID 更新 ForeignKey 字段。您应该传递模型对象来更新它。你可以试试
for fr,to in d.items():
Test.objects.filter(id=fr).update(id=to)
test_obj = Test.objects.get(id=to)
Question.objects.filter(test_id=fr).update(test=test_obj)
更新:
从 Django 1.8 开始,您可以使用 id
的 ForeignKey 对象来更新对象。
for fr,to in d.items():
Test.objects.filter(id=fr).update(id=to)
Question.objects.filter(test_id=fr).update(test_id=to)
在 Django 1.8 中实现
用法:
Bar.objects.filter(pk=foo.id).update(a_id=bar.id)
Bar.objects.filter(pk=foo.id).update(a=bar.id)