簡體   English   中英

Django - get_context_data() 缺少 1 個必需的位置參數:'form'

[英]Django - get_context_data() missing 1 required positional argument: 'form'

我正在嘗試將 inlineformset 添加到 Django 博客項目中。 我收到了帖子,我想通過基於類的視圖向帖子添加多個圖像。 但是當我嘗試 get_context_data 時,我收到此錯誤:

get_context_data() 缺少 1 個必需的位置參數:'form'

模型.py:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = RichTextField(blank=True, null=True)

class PostImage(models.Model):
    post = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='gallery/')
    description = models.CharField(max_length=300, blank=True)

表單.py

class CreatePostForm(forms.ModelForm):
     class Meta:
         model = Post
         fields = ['title' , 'content' ]

PostImageFormSet = inlineformset_factory(Post, PostImage, fields=['image', 'description'], exclude=['post'] , max_num=30, extra=3)

視圖.py

class PostCreateView(LoginRequiredMixin, CreateView):

     form_class = CreatePostForm
     template_name = 'blog/post_form.html'

     def get_context_data(self, form):
         context = super(PostCreateView. self).get_context_data(**kwargs)
         if self.request.POST:
             context['post_images'] = PostImageFormSet(self.request.POST)
         else:
             context['post_images'] = PostImageFormSet()
         return context

      def form_valid(self, form):
          context = self.get_context_data(form=form)
          formset = context['post_images']
          form.instance.author = self.request.user
          if formset.is_valid():
              response = super().form_valid(form)
              formset.instance = self.object
              formset.save()
              return response
          else:
              return super().form_invalid(form)

知道為什么我會收到這種錯誤嗎? 謝謝你。

您應該刪除form參數。 無論如何,該表單從未在get_context_data使用:

class PostCreateView(LoginRequiredMixin, CreateView):
     form_class = CreatePostForm
     template_name = 'blog/post_form.html'

     def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(*args, **kwargs)
         if self.request.POST:
             context['post_images'] = PostImageFormSet(self.request.POST)
         else:
             context['post_images'] = PostImageFormSet()
         return context

      def form_valid(self, form):
          context = self.get_context_data()
          formset = context['post_images']
          form.instance.author = self.request.user
          if formset.is_valid():
              response = super().form_valid(form)
              formset.instance = self.object
              formset.save()
              return response
          else:
              return super().form_invalid(form)

暫無
暫無

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

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