[英]MySQL gives an “Unknown column 'user.id' in 'field list'” error using Django's automatic id
我的User
模型没有主键,因此将使用自动id
。 但是,当我尝试通过外键引用它时,使用Django的“ _set
”表示法访问它时:
def postDetails(request, pk)
post = Post.objects.get(pk=pk)
if post.user_set.all(): # Errors on this line
[...]
我从MySQL得到一个错误:
/ webApp / postDetail / 42 /中的OperationalError(1054,“字段列表”中的未知列“ user.id”)
我究竟做错了什么? 我应该以其他方式访问它吗? 自动ID是否有限制?
型号参考:
class Post(models.Model):
name = models.CharField(max_length=128)
blog = models.ForeignKey('Blog')
active = models.BooleanField(blank=True)
created_date = models.DateTimeField()
class Meta:
managed = False
db_table = 'post'
def __unicode__(self):
return self.name
class User(models.Model):
level = models.ForeignKey(Level)
post = models.ForeignKey(Post)
name = models.CharField(max_length=64)
note = models.CharField(max_length=4096)
active = models.BooleanField(blank=True, default=True)
class Meta:
managed = False
db_table = 'user'
我想包括的其他内容:在运行此程序之前,我确实运行过syncdb
。
编辑 :错误的答案。 检查下面的评论
问题在于您已managed
将其设置为False
。 根据文档
如果为False,则不会对此模型执行数据库表创建或删除操作。 如果模型表示通过其他某种方式创建的现有表或数据库视图,则此功能很有用。 当managed = False时,这是唯一的区别。 模型处理的所有其他方面与正常情况完全相同。 这包括
如果不声明,则将自动主键字段添加到模型中。 为避免对以后的代码阅读器造成混淆,建议在使用非托管模型时从正在建模的数据库表中指定所有列。
您将需要定义primary key
因为默认情况下不再这样做。
不能100%确定,但是我认为即使Django会将id字段添加到模型类中,该字段也不会通过syncdb传播到数据库。
一种尝试的方法是重命名现有的User表,运行syncdb并查看是否创建了User表。 如果不是(可能是由于托管标志),请使用managed = True重试。 如果在这种情况下出现id字段,那么我的猜测是您必须使用与自动创建的参数相同的参数将其手动添加到User表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.