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

Python Django-用于公共或私人输入的选项,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我对django非常陌生,我正在开发一个项目,我试图让用户选择是否公开他们的输入,因为目前他们只能看到他们创建的内容。我想知道我将如何改变我的模型,让用户选择,以及是否还有其他需要更改的内容,以便将其包含在我的表单中(可能是forms.py,如果是,我希望字段是什么)?另外,我需要在我的功能中更改什么 这是我目前的it模型: class Topic(models.Model): """A topic the user is learning about""" text = mod

我对django非常陌生,我正在开发一个项目,我试图让用户选择是否公开他们的输入,因为目前他们只能看到他们创建的内容。我想知道我将如何改变我的模型,让用户选择,以及是否还有其他需要更改的内容,以便将其包含在我的表单中(可能是forms.py,如果是,我希望字段是什么)?另外,我需要在我的功能中更改什么

这是我目前的it模型:

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)
谢谢
米洛

你是说

我试图让用户选择将他们的输入公开还是公开 不是,因为目前他们只能看到自己创造的东西

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

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

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

然而,这意味着任何用户都会从每个用户那里看到任何被检查为公共的东西


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

我不确定的是复选框代码应该是什么样子,尽管这非常有用