Skip to content

I use source_field, but it can not use when i need join, it has a mapping error #2029

@yintian710

Description

@yintian710

My model field:

class BaseModel(Model):
    id = fields.BigIntField(pk=True, description="ID")

class SpiderConfig(BaseModel):
    spider = fields.OneToOneField("work.Spider", related_name="config", on_delete=fields.CASCADE, description="所属接口", source_field="uniq_spider_id", forward_key="uniq_spider_id", )
# forward_key has no effect


class Spider(BaseModel):
    name = fields.CharField(max_length=255, unique=True, index=True, description="爬虫名称", source_field="uniq_name")

and code:

        name_filters = ...
        configs = await SpiderConfig.filter(tags_filters).distinct()

        # tags 和 name 是 OR 关系
        filters = Q(config__in=configs) | name_filters
        query = Spider.all().filter(filters)
        total_count = await query.count()

it got error

File "D:\yintian\project\nasa\src\application\repositories\_base.py", line 74, in get_list_by_fmt
    total = await query.count()
                  │     └ <function QuerySet.count at 0x000001DEBA6174C0><tortoise.queryset.QuerySet object at 0x000001DEBB337340>
  File "D:\yintian\project\nasa\venv\Lib\site-packages\tortoise\queryset.py", line 1463, in _execute
    _, result = await self._db.execute_query(*self.query.get_parameterized_sql())
                      │    │                  │    └ <member 'query' of 'AwaitableQuery' objects>
                      │    │                  └ <tortoise.queryset.CountQuery object at 0x000001DEBD54A3C0>
                      │    └ <member '_db' of 'AwaitableQuery' objects><tortoise.queryset.CountQuery object at 0x000001DEBD54A3C0>
  File "D:\yintian\project\nasa\venv\Lib\site-packages\tortoise\backends\mysql\client.py", line 58, in translate_exceptions_
    raise OperationalError(exc)
          └ <class 'tortoise.exceptions.OperationalError'>
tortoise.exceptions.OperationalError: (1054, "Unknown column 'spider_config.spider_id' in 'on clause'")

and I find SpiderConfig._meta.o2o_fields is {'spider'}, so orm need spider_config.spider_id, but I need spider_config.uniq_spider_id

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions