我是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)
感谢
米洛
答案 0 :(得分:0)
你在说
我试图让用户选择公开或者公开输入 不,因为目前他们只能看到他们创造的东西。
如果您的描述正确并且您希望用户选择主题是否公开,则一种简单的方法是在模型中添加BooleanField
并在表单中添加一个复选框。因此,当用户选中该复选框时,它将公开或不公开(如果您想要反向)。
但即使用户检查是公开的,您也应过滤查询。
我有Topic.objects.filter(owner=request.user.pk)
您的用户仍会看到他创建的内容。
您需要Topic.objects.filter(checked=true)
这仍然意味着任何用户都会看到每个用户都检查过公开的内容。
所以,也许你需要两个查询。一个供用户查看他创建的内容,另一个用于检查公共内容。