【问题标题】:Reverse relationship lookup in Django REST framework - FieldError: Cannot resolve keyword into fieldDjango REST框架中的反向关系查找-FieldError:无法将关键字解析为字段
【发布时间】:2015-05-22 10:23:23
【问题描述】:

我知道我不是第一个提出这个问题的人,但我找不到解决方案。我有以下型号:

class Size(models.Model):
    id = models.IntegerField()
    size = models.CharField(max_length=255)
    country = models.CharField(max_length=255)

    class Meta:
        db_table = 'size'


class Orders(models.Model):
    id = models.IntegerField()
    order_id = models.CharField(max_length=255)
    date = models.DateTimeField()
    status = models.CharField(max_length=1)
    brand_id = models.IntegerField()
    user_id = models.IntegerField()
    shop_id = models.IntegerField()
    item_id = models.IntegerField()
    category_id = models.IntegerField()
    item_gender = models.CharField(max_length=1)
    return_reason = models.CharField(max_length=255)
    size = models.ForeignKey(Size)

    class Meta:
        db_table = 'orders'

我正在尝试使用反向查找,因为它描述了 this

sizes = Size.objects.using('mysql_db').filter(orders__user_id=6)

错误:

Cannot resolve keyword 'orders' into field. Choices are: country, id, size
Request Method: GET
Request URL:    http://127.0.0.1:8000/dictionary/types/
Django Version: 1.8.2
Exception Type: FieldError
Exception Value:    
Cannot resolve keyword 'orders' into field. Choices are: country, id, size
Exception Location: /Users/.../env/lib/python3.4/site-packages/django/db/models/sql/query.py in names_to_path, line 1391
Python Executable:  /Users/.../env/bin/python
Python Version: 3.4.3

【问题讨论】:

  • 您的filter 声明是正确的。我只是用你的模型在本地测试它,它正在工作。您的问题应该在其他地方,但现在无法确定问题出在哪里。

标签: django python-3.x django-rest-framework


【解决方案1】:

变种之一

sizes = [item.size for item in Orders.objects.filter(user_id=6)]

但是,您应该使用select_related 将 SQL 查询的数量减少到一个。

否则您将隐式执行 n+1 个查询。

【讨论】:

  • 我不确定select_related是否可以完成@
【解决方案2】:

我已验证您发布的查询按原样工作,问题出在您代码的其他地方。您是否运行过 makemigrations 和 migrate?你可以找到工作代码示例here:

models.py

from django.db import models

# Create your models here.
class Size(models.Model):
    id = models.IntegerField(primary_key=True)
    size = models.CharField(max_length=255)
    country = models.CharField(max_length=255)

    class Meta:
        db_table = 'size'


class Orders(models.Model):
    id = models.IntegerField(unique=True,primary_key=True)
    order_id = models.CharField(max_length=255)
    date = models.DateTimeField()
    status = models.CharField(max_length=1)
    brand_id = models.IntegerField()
    user_id = models.IntegerField(default = 6)
    shop_id = models.IntegerField()
    item_id = models.IntegerField()
    category_id = models.IntegerField()
    item_gender = models.CharField(max_length=1)
    return_reason = models.CharField(max_length=255)
    size = models.ForeignKey(Size)

    class Meta:
        db_table = 'orders'

views.py

class ReverseFK(ListView):
    model = Size
    def get_queryset(self):
        Size.objects.create()
        return Size.objects.filter(orders__user_id=5)

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 2021-05-23
    • 2013-10-09
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多