猿问

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

有问题


我正在创建一个项目,您可以在其中创建主题,对于未经身份验证的用户可以是私有的或公开的。在每个主题中,您可以创建多个条目,应用于该主题。现在我正在尝试在我的 new_topic.html 中创建一个复选框,如果你选中它,它的计算结果为 True,如果不是,则为 False 但我无法在不登录的情况下看到该主题


我想要的是


我想通过在视图中将公共属性更改为 True 向尚未登录的用户显示公共主题,但我不知道如何实现它们


我试过的


我玩过查询集 topic.public == True 但我不知道如何使用它


编码


我的 /learning_logs/models.py 看起来像这样:


from django.db import models

from django.contrib.auth.models import User


class 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.text


class 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[:]


慕森王
浏览 209回答 2
2回答

偶然的你

不要使用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需要时使用。
随时随地看视频慕课网APP

相关分类

Python
我要回答