我想用django做一個博客,任何用戶都可以創建帖子,并且帖子只屬于該用戶。帖子的作者大多是當前登錄的用戶,并且永遠不會改變。我有一個問題,在帖子模型中獲得當前用戶!
我如何在帖子模型中存盤當前寫的帖子?
我如何在帖子模型中存盤寫帖子的當前用戶?
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils import timezone
from ckeditor.fiiles import RichTextField
class Post(models.Model) 。
STATUS_CHOICES = {
}
TECHNOLOGY_CHOICES = {
}
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,unique_for_date='publish')
author = models.ForeignKey(User,on_delete=models.CASCADE,)
body = RichTextField(config_name='default'。 blank=True, null=True)
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models. CharField(max_length=10, choices=STATUS_CHOICES, default='draft' /span>)
category = models.CharField(max_length=250,default='other')
def __str__(self) 。
return self.title ' | ' str(self.author)
def get_absolute_url(self) 。
return reverse('index')
uj5u.com熱心網友回復:
如果我們為帖子的創建制作視圖,并使用CreateView來定制它,就像下面的當前用戶被推送到資料庫一樣:
class PostCreateView(CreateView):
model = Post
form_class = PostCreateForm
template_name = 'weblog/post/post_create.html'。
def form_valid(self,form)。
form.instance.author = self.request.user
return super().form_valid(form)
請記住,如果你使用創建帖子的表單或在視圖中的欄位,不要在欄位中使用作者用戶。這個代碼將當前用戶發送到資料庫。 對于編輯帖子,你可以檢查當前用戶是否是帖子的制作者,然后顯示編輯頁面的HTML :
。{% if user.id == post.author.id %}。
<div class="form-group">
<form method="post">/span>
{% csrf_token %}
{{form.as_p }}}
<button class="btn btn-primary"/span>> 立即更新</button>
</form>/span>
</div>/span>
{% else %}
<h2>沒有這樣的頁面給你! </h2>沒有這樣的頁面 !
{% endif %}
uj5u.com熱心網友回復:
而forms.py中的PostCreateForm和PostUpdateForm是:
class PostCreateForm(forms.ModelForm)。
class Meta:
model = Post
fields = ('title', 'slug','body','status')
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'})。)
'slug': forms.TextInput(attrs={'class': 'form-control'})。)
'body': RichTextField(config_name='default')。
'status': forms.Select(attrs={'class': 'form-control'})。)
}
class PostUpdateForm(forms.ModelForm)。
class Meta:
model = Post
fields = ('title', 'slug','body','status', )
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'})。)
'slug': forms.TextInput(attrs={'class': 'form-control'})。)
'body': RichTextField(config_name='default')。
'status': forms.Select(attrs={'class': 'form-control'})。)
}
uj5u.com熱心網友回復:
此外,我們還有django mixins來為我們做這樣的事情 django mixins是用于認證系統的,如果我們使用views.py檔案中的view類,像下面這樣,django會在編輯頁面和洗掉頁面顯示任何用戶的404頁面,除了帖子創建者的用戶:
。如果我們匯入 :
from django.contrib.auth.mixins import (
LoginRequiredMixins,
UserPassesTestMixin[/span
)
并在視圖類中使用它們 :
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin,CreateView)。)
model = Post
form_class = PostUpdateForm
template_name = 'weblog/post/post_update.html'/span>
def test_func(self)。
obj = self.get_object()
return obj.author == self.request.user
class DeletePostView(LoginRequiredMixin, UserPassesTestMixin,UpdateView)。)
模型 = Post
template_name = 'weblog/post/post_delete.html'/span>
success_url = reverse_lazy('index')
def test_func(self)。
obj = self.get_object()
return obj.author == self.require.user
有了這段代碼,我們甚至不需要改變HTML來檢查用戶。
post page html :
<div class="form-group">
<form method="post">/span>
{% csrf_token %}
{{form.as_p }}}
<button class="btn btn-primary"/span>> 立即更新</button>
</form>/span>
</div>/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315497.html
標籤:
下一篇:如何洗掉嵌套陣列的專案?[復制]
