Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 使用基于类的视图更新表单集_Django_Django Forms_Django Views_Django Templates - Fatal编程技术网

Django 使用基于类的视图更新表单集

Django 使用基于类的视图更新表单集,django,django-forms,django-views,django-templates,Django,Django Forms,Django Views,Django Templates,我用django 2.2创建了一个web博客,每个帖子都有多个图片,但是当我尝试更新帖子时 图像不会更新 我使用基于类的视图 class Post(models.Model): user= models.ForeignKey(Account,on_delete=models.CASCADE) title= models.CharField(max_length=100) #others class PostImage(models.Model): post= m

我用django 2.2创建了一个web博客,每个帖子都有多个图片,但是当我尝试更新帖子时 图像不会更新 我使用基于类的视图

class Post(models.Model):
    user= models.ForeignKey(Account,on_delete=models.CASCADE)
    title= models.CharField(max_length=100)
    #others

class PostImage(models.Model):
    post= models.ForeignKey(Post,on_delete=models.CASCADE,related_name='images')
    media_files = models.FileField(upload_to=random_url)
这是我的表格

class PostImageForm(forms.ModelForm):
    class Meta:
        model = PostImage
        fields = [
            'media_files'
        ]
class PostUpdateForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = [
           'title','description',#and others
        ] 
我的观点

PostImageFormSet = inlineformset_factory(
Post,PostImage,form=PostImageForm,extra=1,can_delete=True,can_order=False
) 

class PostUpdateView(LoginRequiredMixin,UserPassesTestMixin,UpdateView):
    model = Post
    form_class = PostUpdateForm
    template_name = 'posts/update_post.html'
    def get_context_data(self,**kwargs):
        data = super().get_context_data(**kwargs)
        if self.request.POST:
            data['images'] = PostImageFormSet(self.request.POST or None,self.request.FILES,instance=self.object)
        else:
            data['images'] = PostImageFormSet(instance=self.object)
        return data
    def form_valid(self,form):
        context = self.get_context_data()
        images = context['images']
        with transaction.atomic():
            if form.is_valid() and images.is_valid():
                self.object = form.save()
                images.instance = self.object
                images.save()
        return super().form_valid(form)
    def test_func(self):
        post = self.get_object()
        if self.request.user.username == post.user.username:
            return True
        return False
    def get_success_url(self):
        return reverse_lazy('post:post-detail',kwargs={'slug':self.object.slug})
我的模板

<form enctype="multipart/form-data" method="post" action="">
        {% csrf_token %}
        {{images.management_form }}
        {{ form|crispy }}
        {% for img in images %}
            <label>{{img.media_files.label}}</label>
              {{img.media_files}}
        {% endfor %}
            <button type="submit" class="btn btn-block btn-primary">update</button>
    </form>

{%csrf_令牌%}
{{images.management_form}
{{form | crispy}}
{图像中img的百分比%}
{{img.media_files.label}
{{img.media_files}
{%endfor%}
更新
我想知道为什么不更新帖子的图片!?
感谢您的重播。

images.is\u valid()必须为false,所以它只保存了表单而不是图像,然后重定向到success\u url。@Blackdoor所以您认为我应该删除检查它的有效输入?images.is\u valid()必须为false,所以它只保存了表单而不是图像,然后重定向到success\u url。@Blackdoor所以你认为我应该删除并检查它的输入是否有效?