【问题标题】:django rest framework: filter many to many modelsdjango rest框架:过滤多对多模型
【发布时间】:2023-03-18 13:37:01
【问题描述】:

我有一个产品模型、类别模型和一个 product_category 模型,用于将产品 ID 存储到多个类别。

models.py

class Product(models.Model):    
    title = models.CharField(max_length=255, blank=True)
    slug = models.SlugField(_('Slug'), max_length=255, unique=False)

class Category(models.Model):   
    name = models.SlugField(_('Slug'), max_length=255, unique=False)

class ProductCategory(models.Model):
    product = models.ForeignKey('catalogue.Product', verbose_name=_("Product"))
    category = models.ForeignKey('catalogue.Category', verbose_name=_("Category"))

我的序列化器.py

class MyProductLinkCustomSerializer(ProductLinkSerializer):

class Meta(ProductLinkSerializer.Meta):
    fields = ('url', 'id', 'product_id', 'title',)

views.py

class ProductListCustom(basic.ProductList):
    def get_queryset(self):
        category_id = self.request.query_params.get('category_id', None)
        #filter products with this category_id, if someone provided category_id in url

        return Product.objects.all()
    serializer_class = MyProductLinkCustomSerializer

我想列出每个产品所属的类别对象的产品。我还想按其所属的 category_id 过滤产品。

【问题讨论】:

    标签: python django-models django-rest-framework django-serializer django-oscar


    【解决方案1】:

    其实我觉得你应该考虑:使用models.ManyToManyField来链接category和product。

    class Product(models.Model):    
        title = models.CharField(max_length=255, blank=True)
        slug = models.SlugField(_('Slug'), max_length=255, unique=False)
    
        categories = models.ManyToManyField(Category, related_name='products')
    

    然后,您可以像这样过滤产品:

    Product.objects.filter(categories=category_id)
    

    这里有一些useful example for ManyToManyField

    【讨论】:

      猜你喜欢
      • 2013-01-22
      • 1970-01-01
      • 2019-03-06
      • 2016-05-30
      • 2012-12-24
      • 2017-05-27
      • 2018-10-15
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多