Django查询以检查多对多关系字段中的项

2024-04-27 11:03:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户和一个交易模型,如下所示。用户模型有一个“收藏夹”字段,它与交易模型有多对多关系

我正在尝试允许用户将交易保存到他们的收藏夹中。我已经测试了favoriteremove_favorite视图,它们都在做它们应该做的事情

这是我的问题--我的deal_detail.html页面上的条件语句,它检查页面上的当前交易是否是登录用户的最爱,但似乎不起作用

{% if deal_detail in user.favorites %}

我只是不知道该怎么检查

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True, error_messages={'unique':"This email has already been registered."})
    username = models.CharField(max_length=40, default='')
    first_name = models.CharField(max_length=40, default='', blank=True)
    last_name = models.CharField(max_length=40, default='', blank=True)
    date_joined = models.DateTimeField(default=timezone.now)
    favorites = models.ManyToManyField(Deal, related_name='favorited_by', null=True, blank=True)

class Deal(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=140, unique=True)
    description = models.TextField(default='')

我的相应观点如下:

    def deal_by_detail(request, slug):
        deal_detail = Deal.objects.get(slug=slug)
        user = request.user
        return render(request, 'deals/deal_detail.html', {'deal_detail': deal_detail, 'user': user})

    @login_required(login_url='/accounts/sign_in/')
    def favorite(request, pk):
        if request.method == 'POST':
            favorite = Deal.objects.get(pk=pk)
            user = request.user
            user.favorites.add(favorite)
            messages.add_message(request, messages.INFO, 'Deal Favorited.')
            return redirect('home')

    @login_required(login_url='/accounts/sign_in/')
    def remove_favorite(request, pk):
        if request.method == 'POST':
            favorite = Deal.objects.get(pk=pk)
            user = request.user
            user.favorites.remove(favorite)
            messages.add_message(request, messages.INFO, 'Deal Removed.')
            return redirect('home')

我的表单deal_detail.html如下所示:

  {% if deal_detail in user.favorites %}

     <form id="favorite{{deal_detail.id}}" method="POST" action="{% url 'deals:favorite' deal_detail.id %}">
      {% csrf_token %}
       <input type="hidden" name="supporttype" />
       <input type="submit" value="Add Deal to Favorites" />
    </form>

     {% else %}

      <form id="favorite{{deal_detail.id}}" method="POST" action="{% url 'deals:remove_favorite' deal_detail.id %}">
      {% csrf_token %}
       <input type="hidden" name="supporttype" />
       <input type="submit" value="Remove Deal From Favorites" />
      </form>

{%endif%}


Tags: idtruedefaultmodelsrequestlengthfavoritemax
1条回答
网友
1楼 · 发布于 2024-04-27 11:03:36

我相信你只是错过了。在许多领域之后。然后它应该能够运行检查并按您的预期运行

{% if deal_detail in user.favorites.all %}

相关问题 更多 >