在Django中将内容类型限制为用户的最佳方法是什么方法?
让我们说我希望拥有用户角色“博客”的所有用户都拥有自己的博客。
我创建了一个博客应用程序。如何限制它以便登录的用户只能在他自己的“博客”中发布,如何制作仅显示用户博客的视图?
答案 0 :(得分:4)
首先你的博客条目必须附在用户身上,所以你知道在博客上展示它,对吗? models.py:
class BlogEntry(models.Model):
user = models.ForeignKey(User, related_name='blog_entries')
other_field_1 = ...
other_field_2 = ...
接下来,在ModelForm中跳过它,forms.py:
class BlogEntryModelForm(forms.ModelForm):
class Meta:
exclude = ('user',)
然后,当用户想要发布条目时,您需要记录,views.py:
@login_required
def post_blog_entry(request):
....
if request.method == 'POST':
form = BlogEntryModelForm(request.POST)
if form.is_valid():
new_entry = form.save(commit=False)
new_entry.user = request.user
new_entry.save()
当您想要显示一些用户博客时,views.py:
def view_blog(request, blogger_name):
user = get_object_or_404(User, username=blogger_name)
entries = user.blog_entries.all()
用户是django.contrib.auth.models.User 如果用户无权创建博客,您可以向上面的视图添加自定义角色检查以显示404页面或错误页面。
您可以选择将django.contrib.auth中的User替换为您自己的User实现,但您也必须为其编写模型,身份验证和中间件......
答案 1 :(得分:-1)
我没有尝试实现这一点,但我找到了另一个非常好的解决方案。它很容易实现,并做了我想要的一切。