“manytomanydescriptor”对象在django中没有属性过滤器,而尝试将项添加到收藏夹中

3yhwsihp  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(340)

有人能帮我吗?
我在尝试更改添加到收藏夹时的图标颜色时遇到此错误。
这个错误有什么解决办法吗?
这是我将我的帖子添加到收藏夹的视图:

@login_required
def favourite_post(request, id):
    post = get_object_or_404(Car, id=id)

    if post.favourite.filter(id=request.user.id).exists():
        post.favourite.remove(request.user)
    else:
        post.favourite.add(request.user)
    return HttpResponseRedirect(post.get_absolute_url())

这是我的模型

class Car(models.Model):
    favourite = models.ManyToManyField(User, related_name='favourite', blank=True)

我想发送的是最喜欢的节目,哪个节目被添加到最喜欢的节目中

def show_all_car_page(request):
    filtered_cars = CarFilter(
        request.GET,
        queryset=Car.objects.all()
    )

    paginator = Paginator(filtered_cars.qs, 3)
    page = request.GET.get('page', 1)
    posts = paginator.get_page(page)

    is_favourite = bool
    if filtered_cars.Meta.model.favourite.filter(id=request.user.id).exists():
        is_favourite = True
    context = {
        'filtered_cars': filtered_cars,
        'posts': posts,
        'is_favourite': is_favourite
    }

    return render(request, 'index.html', context=context)

这里是我的filter.py,我可以在这里过滤我的帖子,

class CarFilter(django_filters.FilterSet):
    class Meta:
        model = Car
        fields = ['brand', 'city', 'body_type', 'model', 'year', 'transmission']

在我的模板中,我也是这样做的:

{% if request.user.is_authenticated %}
     <a href="{% url 'car:favourite_post' id=car.id %}" title="Seçilənlərə Əlavə et">

          {% if is_favourite %}
             <i class="fas fa-heart" style="color: red"></i>
          {% else %}
              <i class="far fa-heart"></i>
          {% endif %}
     </a>
  {% else %}
      <a href="{% url 'user:login' %}" title="Seçilənlərə Əlavə et">
              <i class="far fa-heart"></i>
       </a>
  {% endif %}
0x6upsns

0x6upsns1#

好吧,那么你是想 filter 使用的示例(单个对象) Car table
您需要做的是使用类本身进行过滤。例如

car = Car.objects.first()

users_cars = Car.favourite.through.objects.filter(user_id=request.user.id)

你在干什么 .add().remove() 但这是正确的。这些都是在模型的一个示例上完成的。

相关问题