Django - 公共或私人输入的选项

时间:2017-03-13 14:22:38

标签: python django django-models django-forms

我是django的新手,我正在开发一个项目,我试图让用户选择公开或不公开他们的输入,因为他们只能看到他们创造的东西。我想知道如何改变我的模型,让用户可以选择,如果还有什么我需要更改以将其包含在我的表单中(可能是forms.py,如果有的话,我想要什么作为字段) ?另外,我需要改变我的功能。

这是我目前的模型:

class Topic(models.Model):
    """A topic the user is learning about"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(User)

    def __str__(self):
        """Return a string representation of the model."""
        return self.text 

这是forms.py:

from django import forms

from .models import Topic, Entry

class TopicForm(forms.ModelForm):
    class Meta:
        model = Topic
        fields = ['text']
        labels = {'text': ''}

class EntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['text']
        labels = {'text': ''}
        widgets = {'text': forms.Textarea(attrs={'cols': 80})}

这就是我的功能:

def topics(request):
    """Show all topics."""
    topics = Topic.objects.filter(owner=request.user).order_by('date_added')
    context = {'topics': topics}
    return render(request, 'learning_logs/topics.html', context)

感谢
米洛

1 个答案:

答案 0 :(得分:0)

你在说

  

我试图让用户选择公开或者公开输入   不,因为目前他们只能看到他们创造的东西。

如果您的描述正确并且您希望用户选择主题是否公开,则一种简单的方法是在模型中添加BooleanField并在表单中添加一个复选框。因此,当用户选中该复选框时,它将公开或不公开(如果您想要反向)。

但即使用户检查是公开的,您也应过滤查询。 我有Topic.objects.filter(owner=request.user.pk)您的用户仍会看到他创建的内容。

您需要Topic.objects.filter(checked=true)

之类的内容

这仍然意味着任何用户都会看到每个用户都检查过公开的内容。

所以,也许你需要两个查询。一个供用户查看他创建的内容,另一个用于检查公共内容。