为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Django 中向所有用户公开主题?

如何在 Django 中向所有用户公开主题?

慕森王 2021-07-02 17:07:44
有问题我正在创建一个项目,您可以在其中创建主题,对于未经身份验证的用户可以是私有的或公开的。在每个主题中,您可以创建多个条目,应用于该主题。现在我正在尝试在我的 new_topic.html 中创建一个复选框,如果你选中它,它的计算结果为 True,如果不是,则为 False 但我无法在不登录的情况下看到该主题我想要的是我想通过在视图中将公共属性更改为 True 向尚未登录的用户显示公共主题,但我不知道如何实现它们我试过的我玩过查询集 topic.public == True 但我不知道如何使用它编码我的 /learning_logs/models.py 看起来像这样:from django.db import modelsfrom django.contrib.auth.models import Userclass Topic(models.Model):    """topic은 사용자가 공부하고 있는 주제이다."""    text = models.CharField(max_length=200)    date_added = models.DateTimeField(auto_now_add=True)    owner = models.ForeignKey(User, on_delete = models.CASCADE)    public = models.BooleanField(default=False)     def __str__(self):        """모델에 관한 정보를 문자열 형태로 변환한다."""        return self.textclass Entry(models.Model):    """주제에 관해 공부한 내용"""    topic = models.ForeignKey(Topic, on_delete = models.CASCADE)    text = models.TextField()    date_added = models.DateTimeField(auto_now_add=True)    class Meta:        verbose_name_plural = 'entries'    def __str__(self):        """모델에 관한 정보를 문자열 형태로 반환한다."""        if self.text[:] > self.text[:50]:            return self.text[:50] + "..."        else:            return self.text[:]
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

不要使用login_required装饰器,移除@login_required要公开访问的视图上方的行。


此login_required装饰器用于确保视图只能由经过身份验证的用户访问。


仅当您希望经过身份验证的用户使用该视图时才使用此选项。


您收到此错误,因为排队Topic.objects.filter(owner=request.user)的request.user是AnonymousUser。


如果仅在主题是公开的情况下才渲染,您可以检查它topic.public是否返回 true 或 false,代码可能类似于 -


def topic(request, topic_id):

    """주제 하나와 연결된 모든 항목을 표시한다."""

    topic = get_object_or_404(Topic, id=topic_id)

    # 주제가 현재 사용자의 것인지 확인한다.

    if topic.public:   

        check_user = check_topic_owner(request, topic)

        entries = topic.entry_set.order_by('-date_added')

        context = {'topic': topic, 'entries': entries}

        return render(request, 'learning_logs/topic.html', context)

    else:

        return HttpResponseRedirect(reverse('access_dennined'))

@login_required需要时使用。


查看完整回答
反对 回复 2021-07-13
  • 2 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信