根据你的问题,很可能你的表名有错误。 Django的表约定如下:
appname_modelname
所以说,你有投票应用 和投票模型类里面它 民调/ models.py
class Poll(models.Model):
title = models....
然后在你的SQL表名会polls_poll。
如果您首先明确导入模型以避免混淆,则会更好。
from polls.models import Poll
query = "SELECT * FROM polls_poll"
objs = []
for obj in Poll.objects.raw(query):
objs.append(obj)
所以在你的情况下,查询应该是
select * from MyApp_ModelName;
,我认为主键的问题,如果你不打算使用类似CharField“prod001”,然后下拉列表AutoField是一种方法,走。
否则在您的模型的情况下 在models.py中尝试此解决方案。只是为了确保你的primary_key是唯一的。
from django.db.models.signals import pre_save
def add_id(instance, new_id=None):
id = instance.id
if new_id is not None:
id = new_id
checker = ModelName.objects.filter(id=instance.id).order_by("-id")
exists = checker.exists()
if exists:
new_id = len(ModelName.objects.all()) + 1
return add_id(instance, new_id=new_id)
return id
def pre_save_post_receiver(sender, instance, *args, **kwargs):
instance.id = add_id(instance)
pre_save.connect(pre_save_post_receiver, sender=ModelName)
请勿使用原始查询。我还没有发现ORM不能做的一件事,而且我写了一些复杂的查询。如果我在Django应用程序中看到类似的原始查询,我会认为开发人员不知道他们在做什么。 – kagronick