picKit
picKit

Reputation: 463

Error when update with Python Tortoise ORM

I use Tortoise ORM for my Postgresql databse. I have two models. They are related via OneToOneField.

class User(Model):
    class Meta:
        table = "users"

    id = fields.UUIDField(primary_key=True)
    internal_id = fields.IntField(unique=True)
    info: fields.ReverseRelation["UserInfo"]

class UserInfo(Model):
    class Meta:
        table = "user_infos"

    id = fields.UUIDField(primary_key=True)
    rank = fields.IntField()
    user = fields.OneToOneField("app.User", related_name="info")

When I try to update UserInfo by user's internal_id I got an error:

await UserInfo.filter(user__internal_id=SOME_ID).update(rank=5)
tortoise.exceptions.OperationalError: invalid reference to FROM-clause entry for table "user_infos"
HINT:  There is an entry for table "user_infos", but it cannot be referenced from this part of the query.

SQL Query:

UPDATE "user_infos" SET "rank"=$1 FROM "user_infos" "user_infos_" LEFT OUTER JOIN "users" "user_infos__user" ON "user_infos__user"."id"="user_infos"."user_id" WHERE "user_infos__user"."internal_id"=893706004;

If I call just filter without update it works fine. It returns UserInfo object:

await UserInfo.filter(user__internal_id=internal_id)

What I'm doing wrong making update?

Upvotes: 0

Views: 183

Answers (1)

Nikita Kozhemyakin
Nikita Kozhemyakin

Reputation: 1

Try to use .get() instead of .filter().

Upvotes: 0

Related Questions