【问题标题】:ValueError: Field 'id' expected a number but got 'Whisper'ValueError:字段“id”需要一个数字,但得到“耳语”
【发布时间】:2020-08-26 16:26:40
【问题描述】:

这是我的models.py

  class RUDevice(models.Model):
        name = models.CharField(_("Device Name"), max_length=100, blank=False, null=False, help_text="Device Name", default='')
        last_active = models.DateTimeField(_("Last Active"), auto_now=False, auto_now_add=False, 

class Magazine(models.Model):
    device = models.ForeignKey(RUDevice, on_delete=models.CASCADE, null=False, blank=False, related_name='ru_magazine' )
    product_type = models.ForeignKey(ProductType, on_delete=models.CASCADE, null=False, blank=False, related_name='magazine_product_type')

class MagazineProduct(models.Model):
    magazine = models.ForeignKey(Magazine, on_delete=models.CASCADE, null=False, blank=False, related_name='magazine_product', help_text="Select magazine for product")

class ProductType(models.Model):
    brand = models.ForeignKey(ProductCompany, on_delete=models.CASCADE, null=False, blank=False, related_name='company', help_text="Select company name")
    size = models.ForeignKey(ProductSize, on_delete=models.CASCADE, null=False, blank=False, related_name='type_class', help_text="Select product class")

class Product(models.Model):
    sku = models.CharField(_("SKU"), max_length=100, blank=True, unique=True,help_text="Store ID")
    product_type = models.ForeignKey(ProductType, on_delete=models.CASCADE, null=False, blank=False, related_name='product_type', help_text="Select product type")
    count= models.PositiveIntegerField(default=0)

class SingleProduct(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True, related_name='product', help_text="Select product")

我正在尝试过滤具有特定品牌的 rudevices。它将返回所有杂志上拥有该品牌的 rurudevices。 我的第一个方法是这样的。

for i in RUDevice.objects.all():
    mg = Magazine.objects.filter(device=i)

然后使用所有返回的 mg 过滤所有 MagazineProduct。 MagazineProduct.objects.filter(magazine__in=mg, magazine__product_type__brand="Whisper")

如果我可以过滤 magazineProduct 那么我可以获得 rudevices 。但我得到ValueError: Field 'id' expected a number but got 'Whisper'. 我的方法好吗?

【问题讨论】:

  • 很难说出您的数据模型的全部内容。例如,为什么SingleProduct 只有一个产品的外键?杂志真的只能指单个设备吗?等等。
  • 我还有其他字段。与单一产品。为了简单起见,我以这种方式发布。我想要的只是按品牌过滤并显示 rudevices 有这个产品品牌。

标签: django django-models django-rest-framework django-queryset


【解决方案1】:

由于错误状态,它需要一个整数值或一个对象。但是,如果您使用字符串进行搜索,则可能是针对某个字段的。假设它是name,那么您可以这样尝试:

MagazineProduct.objects.filter(
    magazine__device=i,
    magazine__product_type__brand__name="Whisper"
)

我已删除 mg 并在 MagazineProduct 中直接使用 i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2021-12-02
    • 2021-12-07
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多