如何在Django中按模型过滤模型

4
我在从一组模型中筛选对象时遇到了一些问题。
我有3个类:
class Product(models.Model):
   id = models.UUIDField(default=uuid4, primary_key=True, editable=False)
   title_fa = models.CharField(max_length=80)
   title_en = models.CharField(max_length=80)
   ...

class Favorite(models.Model):
   user = models.ForeignKey(Profile, default=None, on_delete=models.CASCADE)
   product = models.ForeignKey('seller.Product', default=None, on_delete=models.CASCADE)
   ...

class Profile(models.Model):
   id = models.UUIDField(default=uuid4, primary_key=True, editable=False)
   first_name = models.CharField(max_length=80, blank=True, null=True)
   last_name = models.CharField(max_length=80, blank=True, null=True)
   shop_name = models.CharField(max_length=80, blank=True, null=True)
   ...

我正在尝试筛选类似于以下内容的东西:

favorite_product = Product.objects.filter(id=favorite__.id)

这是我的视图函数:

def profile(request):
    id = request.COOKIES['id']
    order__ = Order.objects.filter(sender=id)
    profile__ = Profile.objects.get(id=id)
    favorite__ = Favorite.objects.filter(user=id)
    favorite_product = Product.objects.filter(id=favorite__.id)

    return render(request, 'shop/profile/profile.html',
                  {'order': order__, 'profile': profile__, 'favorite_product': favorite_product})

我希望展示用户id在收藏模型中的产品。
模板代码:
{% for item in favorite_product %}
    <div class="profile-recent-fav">
        <a href="#"><img src="{{ item.image.url }}"></a>
        <div class="profile-recent-fav-col">
            <a href="#"></a>
            <div class="profile-recent-fav-price">{{ item.fa_name }}</div>
            <div class="profile-recent-fav-remove">
                <a href="#">
                    <i class="fa fa-trash"></i>
                </a>
            </div>
        </div>
    </div>
{% endfor %}

如果您这样做,会发生什么:favorite_product = Product.objects.filter(id=id) - Ahmed Elgammudi
它不显示任何内容 - Hesam Aghajani
3个回答

1

1

Try :

favorite_product = Product.objects.filter(id=favorite__.Product.id)

如果它能正常工作,请留下评论。


不工作:'QuerySet' 对象没有 'Product' 属性。 - Hesam Aghajani

1

请尝试以下内容 -

favorite__ 是查询集,因此您需要获取所有产品 ID 的列表,可以像这样操作

fab_product_ids=favorite__.values_list("product__id", flat=True)

然后你可以像这样过滤产品。
favorite_product = Product.objects.filter(id__in=fab_product_ids)

希望这能帮到你。还有其他方法可以完成相同的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接