Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在queryset上更新Django以更改ForeignKey的ID_Python_Django_Django Queryset - Fatal编程技术网

Python 在queryset上更新Django以更改ForeignKey的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

我试图更新一组对象的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 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在各个模型上设置外键,所以我认为可能有一种方法我错过了。谢谢