【问题标题】:django updateview form related modeldjango updateview表单相关模型
【发布时间】:2021-05-29 11:03:31
【问题描述】:

我的 models.py 文件为

class Post(models.Model):
    title = models.CharField(max_length=256)
    body = models.TextField()
    category = models.ManyToManyField("PostCategory", blank=True)

class PostImages(models.Model):
    image = models.ImageField(upload_to="..")
    post = models.ForeignKey("Post", on_delete=models.CASCADE, related_name="images")

forms.py

class UpdateBlogForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = "__all__"
        exclude = ("blogger", "view")
        widgets = {
            "language": forms.Select(attrs={"class": "form-control"}),
            "title": forms.TextInput(attrs={"class": "form-control"}),
            "body": forms.Textarea(attrs={"row": "25", "class": "form-control"}),
        }

我有一个 updateview 作为

class BlogPostUpdateView(generic.UpdateView):
    model = Post
    form_class = UpdateBlogForm
    success_url = "."
    template_name = "blog/dashboard_components/blog_dashboard_eidtpost.html"

updateview 我只有我的 UpdateBlogForm 表单,可以通过任何方式编辑帖子相关图像(添加/删除)。知道如何继续吗?!

【问题讨论】:

    标签: python django django-views django-forms


    【解决方案1】:

    我使用 inlineformset_factory 实现 forms.py

    ...
    from django.forms import inlineformset_factory
    
    ...
    ImagesFormSet = inlineformset_factory(
        Post,
        PostImages,
        fields=("image",),
        extra=4,
        max_num=4,
        widgets={
            "image": forms.FileInput(attrs={"class": "form-control col-md-4 col-sm-4 d-inline"}),
        },
        labels={
            "image": "",
        },
    )
    

    在我的views.py 中发送 ImagesFormSetget_context_data as

    from .forms import UpdateBlogForm, ImagesFormSet
    
    ...
    class BlogUpdateView(generic.UpdateView):
        model = Post
        form_class = UpdateBlogForm
        success_url = "."
        template_name = "blog/dashboard_components/blog_dashboard_eidtpost.html"
    
        def get_context_data(self, **kwargs):
            context = super(BlogUpdateView, self).get_context_data(**kwargs)
            context["images_form"] = ImagesFormSet(instance=get_object_or_404(Post, id=2))
            return context
    
    
    

    最后在我的模板中以 images_form 的形式访问了 ImagesFormSet

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 2017-01-02
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 2017-12-12
      • 1970-01-01
      相关资源
      最近更新 更多