Python 在queryset上更新Django以更改ForeignKey的ID
我试图更新一组对象的ID和引用这些对象的相关表Python 在queryset上更新Django以更改ForeignKey的ID,python,django,django-queryset,Python,Django,Django Queryset,我试图更新一组对象的ID和引用这些对象的相关表 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
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\u id
、test\u id
和testId
,但收到以下错误消息:
django.db.models.fields.FieldDoesNotExist: Question has no field named 'test_id'
目前是否可能
编辑:我不希望每次id更改都必须加载
测试对象。您不能使用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中,您可以使用ForeignKey对象的id
来更新对象
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)
请参阅和。当您尝试此操作时会发生什么?抱歉,现在包含错误消息。是的,这就是我所做的。doco确实描述了这种方法,但没有明确说明不能通过ID来实现,因为可以通过ID在各个模型上设置外键,所以我认为可能有一种方法我错过了。谢谢