我有一个Postgres数据库视图,其中合并了其他表中的一些数据,并且我有一个Django模型来反映此视图(此问题简化了):
class MyModel(models.Model):
othermodel = models.ForeignKey(MyOtherModel, related_name='cached_points')
num_points = models.IntegerField(default=0)
class Meta(object):
managed = False
请注意Managed = False语句,以确保Django不会尝试创建或更改表。
使用该模型,除对其进行迭代外,所有方法都可以正常工作。例如,当我这样做时:
for item in MyModel.objects.all():
....
我得到以下异常:
django.db.utils.ProgrammingError:列app_mymodel.id不存在第1行:SELECT“ app_mymodel”。“ id”,“ app_mymodel ...
我理解该错误,因为在此(虚拟)表中确实没有列“ id”,但是迭代器使用它来遍历结果。
我如何在没有主键列的情况下遍历此QuerySet?
谢谢,埃里克
我通过使用以下方法创建了一个值字典,而不是访问模型字段来遍历结果:
items = MyModel.objects.all()
for item in items.values('field1', 'field2', ..):
item['field1'] ... # Access the data
我敢肯定还有其他解决方案,但这对我的用例来说是最简单的。
感谢您为我指出正确的方向,@ gbs和@Alasdair。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句