我在模型中创建了OneToOneField关系,并希望获取与数据相关的数据
这是我的型号代码
class Login (models.Model):
login_id = models.AutoField(primary_key = True)
user_name = models.CharField(max_length = 150)
password = models.CharField(max_length = 255)
role_id = models.IntegerField()
user_id = models.IntegerField(unique = True)
class Meta:
db_table = 'login'
def __str__(self):
return self.login_id
class Catcher(models.Model):
catcher_id = models.OneToOneField('Login', to_field = 'user_id', primary_key = True)
catcher_fname = models.CharField(max_length = 128, blank = True)
catcher_lname = models.CharField(max_length = 128, blank = True)
api_key = models.CharField(max_length = 100, blank = False)
class Meta:
db_table = 'catcher'
def __str__(self):
return self.catcher_id
我有登录表,login_id是PK,2表是Catcher,catcher_id是PK键。
在登录表中,user_id是FK,与catcher表中的Catcher_id(PK)相关。
当我在没有关系的情况下对catcher表运行查询时,它会返回表数据
catcher_id = models.AutoField(primary_key = True)
查询 loginDetail = Catcher.objects.get(catcher_id = 742)#subing succssfully
但是当我创建一个关系时,它会返回一个错误
catcher_id = models.OneToOneField('Login', to_field = 'user_id', primary_key = True)
loginDetail = Catcher.objects.get(catcher_id =742 ) # Get an error
OperationalError at /login/login/
(1054, "Unknown column 'catcher.catcher_id_id' in 'field list'")
为什么它返回我这样的字段名称catcher_id_id ??
答案 0 :(得分:2)
首先。如果您使用的是密钥,则不应在名称中使用“id”。 Django使用'id',因此数据库中的列名将为' user_id_id '。我想你不想在你的数据库中使用这个名字。这是多余的。
第二件事,你应该将对象传递给查询。因为OneToOneField与Login模型相关,所以应该传递Login对象。所以尝试这样的事情,你必须改变你的价值观:
loginDetail = Catcher.objects.get(catcher_id=Login.objects.get(user_id=742)) # you should change only on 'login' and only on 'user'
但是你也可以在模型(数据库表)上使用连接:
loginDetail = Catcher.objects.filter(catcher_id__user_id=742)
同样基于PEP,你不应该在参数名和等号之间使用空格。只写:.get(user_id=742))
而非.get(user_id =742))