首页 > 解决方案 > ValueError:无法分配“5687”:“Table2.kid”必须是“Table1”实例

问题描述

Table1 我从调用某个 API 的管理脚本中获取数据。 Table2还从 Api 获取数据。场景是相同的,所以我已经实现了一个xid关系,以便我可以轻松地从. 必须填充才能填充,因为只有这样才能完成实例的分配。已经存在于 table1 但我仍然收到错误:kidOneToOnetable1table2Table1table1table25687

ValueError: Cannot assign "5687": "Table2.kid" must be a "Table1" instance.

Models.py

class Table1(models.Model):
    xid = models.IntegerField(primary_key=True)
    amount = models.IntegerField()

class Table2(models.Model):
    kid = models.OneToOneField(Table1,primary_key=True, on_delete=models.CASCADE)
    vid = models.IntegerField(null=True, blank=True)
    g_amount = models.IntegerField()

这是我的脚本代码,对于获取数据的两个管理命令都是相同的。

Management/commands/script.py

    """ API CODE """

    data = {
        'kid': kid,
        'vid': vid,
        'g_amount': g_amount

    }
    if Table2.objects.filter(vid=xid).exists() or Table1.objects.filter(xid=kid).exists() is False:
        continue
    else:
        # print(data)
        instance = Table2(**dataff) 
        instance.save()

或者应该有一种方法我不需要有OneToOne关系。使用 Django 的 ORM 可以构造一个查询,它将这两个表中的实例组合在一起并将其放置在一个虚拟表中,这样我就不会失去 ORM 功能。

标签: pythondjangopython-3.xdjango-modelsdjango-views

解决方案


在声明数据字典后应用模型字段的条件检查。它将在 if 条件之后声明,以便可以使用条件保存字典。


推荐阅读