首页 > 解决方案 > 限制 django 视图上的内容

问题描述

我正在尝试执行此操作,所有付费的包含类型 2 的 vip 用户都允许查看完整信息,但它确实如预期的那样,但有一个小问题,如果这不属于 x 用户,它将向最终用户隐藏课程记录。我想向最终用户显示课程,但是如果用户尝试单击课程,则显示升级帐户而不是隐藏内容。我怎样才能做到这一点?

模型

class Lesson(models.Model):
  content_title = models.CharField(max_length=120)
  content_text = models.CharField(max_length=200)
  thumbnail = models.ImageField(upload_to='xxx/xxx/xxx/xxx/xxx')
  link = models.CharField(max_length=200, null=True)
  allowed_memberships = models.ManyToManyField(Membership)

  def __str__(self):
    return self.content_title

看法

def get_context_data(self, **kwargs):
    context = super(bootCamp, self).get_context_data(**kwargs)
    lesson = Lesson.objects.first()
    user_membership = UserMembership.objects.filter(user=self.request.user).first()
    user_membership_type = user_membership.membership.membership_type
    lesson_allowed_mem_types = lesson.allowed_memberships.all()
    context['lessons_allowed_mem_types'] = lesson_allowed_mem_types
    context['lessons'] = None
    if lesson_allowed_mem_types.filter(membership_type=user_membership_type).exists():
        if Lesson.objects.filter(allowed_memberships=1):
            context['lessons'] = Lesson.objects.filter(allowed_memberships=1).values()
        elif Lesson.objects.filter(allowed_memberships=2):
            context['lessons'] = Lesson.objects.filter(allowed_memberships=2).values()
        else:
            pass
    return context

模板

  {% if lessons is not None %}
    {% for lessson in lessons %}
      <div class="col-md-3">
          <a href="/{{ lessson.link }}">
            <div class="item">
              <div class="content-overlay"></div>
              <img src="/{{ lessson.thumbnail }}" />
              <div class="content-details fadeIn-bottom">
                <h3 class="content-title">{{ lessson.content_title }}</h3>
                <p class="content-text">{{ lessson.content_text }}</p>
              </div>
            </div>
          </a>
      </div>
      {% endfor %}
  {% else %}
    <p>upgrade</p>
  {% endif %}

标签: pythondjango

解决方案


如果它小于 1,我建议检查检索到的课程的计数,然后重定向到升级视图/模板。


推荐阅读