我正在学习Django,但是它挂在一个看似简单的时刻。我需要检查并允许用户仅编辑他的帖子,并且如果他单击链接来编辑其他人的链接,则呈现特定页面。
我无法形成用户验证的条件,请帮助:
views.py
@login_required
def blogs_edit_text_post(request, post_id):
post_form = PostForm(instance=TextPost.objects.get(id=post_id))
owner = TextPost.objects.get(pk=1)
if request.user == owner:
if request.method == "POST":
post_form = PostForm(request.POST, instance=TextPost.objects.get(id=post_id))
if post_form.is_valid():
post = post_form.save()
return redirect(blogs_blog)
return render(request, 'blogs/edit_text_post.html', {
'post_form': post_form
})
else:
return render(request, 'blogs/error_page.html', {})
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile_user_id')
blog_title = models.CharField(max_length=300, verbose_name='Название блога')
blog_description = models.TextField(max_length=500, verbose_name='Пара слов о себе', blank=True)
profile_pic = models.ImageField(default='nophoto.jpg', upload_to='user_pics/', blank=True, verbose_name='Аватар')
class TextPost(models.Model):
author = models.ForeignKey(Profile, on_delete=models.CASCADE)
title = models.CharField(max_length=300, verbose_name='Заголовок')
post = models.TextField(max_length=500, verbose_name='Текст поста', blank=False)
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
urls.py
path('blogs/blog/', views.blogs_blog, name='blogs-blog')
答案 0 :(得分:0)
请注意以下几点:
不要将TextPost与Profile模型关联,而应将其直接与User模型关联。对于您的项目,这将更加容易。
始终在OneToOneField或ForeignKeyField中使用“ related_name”。
始终使用上下文(或另一个命名变量)在模板中传递变量。在大型项目中,您将必须传递许多变量。
models.py
const Data = {
DistrictData: [{
"id": "1",
"name": "ss 1",
"cid": "1"
}, {
"id": "2",
"name": "ss 2",
"cid": "1"
}, {
"id": "3",
"name": "ss 3",
"cid": "1"
}
]
}
views.py
class TextPost(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_name') # User, not Profiel, related_name added
title = models.CharField(max_length=300, verbose_name='Заголовок')
post = models.TextField(max_length=500, verbose_name='Текст поста', blank=False)
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)