OneToOneField没有工作django

时间:2017-03-29 08:12:58

标签: python django

我在模型中创建了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 ??

1 个答案:

答案 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))