簡體   English   中英

我如何將 request.user 傳遞到我的表單中?

[英]How would I pass request.user into my form?

我正在嘗試創建一個帖子表單,讓用戶在我的網站上創建帖子。 我一直被困在如何將 request.user 傳遞到“作者”和“參與者”字段中。 有人可以幫忙嗎?

這是我的看法:

def home(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('')

我的 model:

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
    participants = models.ManyToManyField(User, related_name="participants", blank=True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-created"]

    def __str__(self):
        return self.body

我的表格:

from django.forms import ModelForm
from .models import Post

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = '__all__'

我有一個示例,其中基於 class 的視圖很容易完成。

class PostCreateView(CreateView):
    template_name = 'Post/article_create.html'
    form_class = ArticleModelForm
    queryset = Article.objects.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form_journal'] = JournalModelForm
        return context

    def dispatch(self, request, *args, **kwargs):
        if request.method == 'POST':
            want_redirect = request.POST.get('want_redirect')
            if not want_redirect:
                self.success_url = reverse_lazy('article:article-create')
        return super(ArticleCreateView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        form.instance.user = self.request.user //I think this is what you are trying to do
        return super().form_valid(form)

對於author ,您可以使用它。

def home(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        form.author = request.user
        if form.is_valid():
            form.save()
            return redirect('')

對於participants ,您可以等到創建新Post ,然后添加User

if form.is_valid():
   new_post = form.save()
   new_post.participants.add(user)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM