有没有更好的方法编写此代码,以便可以维护DRY?

dev740

我有2个型号

  1. 游览以保存游览

  2. TourImage保存与Tour相关的图像

    class Tour(models.Model):
        name = models.CharField(max_length=50)
    
    class TourImage(models.Model):
        tour = models.ForeignKey(Tour, on_delete=models.CASCADE)
        image = models.FileField(upload_to='images/')
    

在我的views.py文件中,我具有以下代码来保存游览和游览图像

class CreateTourView(CreateView):
    model = Tour
    template_name = "create_tour.html"
    fields = "__all__"

    def form_valid(self, form):
        tour = form.save()
        for image in self.request.FILES.getlist("extra_images"):
            TourImage.objects.create(tour=tour, image=image)
    return super().form_valid(form)

HTML表单如下所示

<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form | crispy }}
<input type="file" name="extra_images" multiple />
<input type="submit" value="Save" />
</form>

效果很好,图像保存在数据库中。

但我也想添加选项来编辑Tour并添加额外的图像,因此UpdateView代码如下

class TourUpdateView(UpdateView):
    model = Tour
    template_name = "update_tour.html"
    fields = "__all__"

    def form_valid(self, form):
        tour = form.save()
        for image in self.request.FILES.getlist("extra_images"):
            TourImage.objects.create(tour=tour, image=image)
        return super().form_valid(form)

.form_valid()CreateView和UpdateView方法相同。

有没有更好的方法编写此代码,以避免重复代码?

威廉·范昂塞姆

您创建一个mixin

class TourImageMixin:
    model = Tour

    def form_valid(self, form):
        tour = form.save()
        for image in self.request.FILES.getlist('extra_images'):
            TourImage.objects.create(tour=tour, image=image)
        return super().form_valid(form)

然后将其混合在两个视图中:

class CreateTourView(TourImageMixin, CreateView):
    template_name = 'create_tour.html'
    fields = '__all__'

class TourUpdateView(TourImageMixin, UpdateView):
    template_name = "update_tour.html"
    fields = '__all__'

实际上,Django的视图(例如ListView[classic CBV])是使用定义某些行为的mixin构建的。对于ListViewMultipleObjectTemplateResponseMixin [Django的DOC]TemplateResponseMixin [Django的DOC]MultipleObjectMixin[Django的DOC]被使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有更好的方法可以在sybase中编写此SQL查询?

来自分类Dev

有没有更短的编写此代码的方法?

来自分类Dev

有没有一种方法可以更实用地编写此代码?

来自分类Dev

有什么更好的方法可以编写此python代码

来自分类Dev

有没有更好的方法来编写此代码来更改python中从“ list”继承的对象?

来自分类Dev

有没有更好的方法来编写此代码?从多个文件夹删除文件

来自分类Dev

有没有更好的方法来编写此查询

来自分类Dev

有没有更好的方法编写此简短脚本?

来自分类Dev

有没有更好的方法来编写此Google BigQuery?

来自分类Dev

有没有更好的方法来编写此mysql选择查询?

来自分类Dev

有没有更好的方法来编写此选择查询

来自分类Dev

Flutter:有没有更好的方法编写以下代码?

来自分类Dev

有没有更好的方法编写业务逻辑以验证互斥代码?

来自分类Dev

有没有更好的方法来实现此MATLAB代码?

来自分类Dev

有没有更好的方法来重写此NumPy代码段

来自分类Dev

有没有更好的方法来重写此NumPy代码段

来自分类Dev

有没有更好的方法可以在Mocha中编写测试语句?

来自分类Dev

有没有更好的方法可以在if语句中编写多个OR语句?

来自分类Dev

有没有更好的方法可以在if语句中编写多个OR语句?

来自分类Dev

有没有更简单的方式编写此代码?

来自分类Dev

有没有其他替代方法可以编写此查询plsql?

来自分类Dev

有没有更好的方法来编写将此代码插入到Clojure中的排序列表中的代码?

来自分类Dev

有没有更好的方法来编写此正则表达式条件查找函数?

来自分类Dev

有没有更好的循环代码的方法?

来自分类Dev

有没有一种方法可以链接我的菜单按钮,以便可以滚动到同一网页上的不同部分?

来自分类Dev

有没有一种方法可以覆盖UITextView UIKeyInput,以便可以从超级视图中输入文本?

来自分类Dev

有没有更好的方法可以重用绘图Matplotlib?

来自分类Dev

有没有一种方法可以在php中优化此mysql代码?

来自分类Dev

有没有更好的方式编写此if-else语句?

Related 相关文章

  1. 1

    有没有更好的方法可以在sybase中编写此SQL查询?

  2. 2

    有没有更短的编写此代码的方法?

  3. 3

    有没有一种方法可以更实用地编写此代码?

  4. 4

    有什么更好的方法可以编写此python代码

  5. 5

    有没有更好的方法来编写此代码来更改python中从“ list”继承的对象?

  6. 6

    有没有更好的方法来编写此代码?从多个文件夹删除文件

  7. 7

    有没有更好的方法来编写此查询

  8. 8

    有没有更好的方法编写此简短脚本?

  9. 9

    有没有更好的方法来编写此Google BigQuery?

  10. 10

    有没有更好的方法来编写此mysql选择查询?

  11. 11

    有没有更好的方法来编写此选择查询

  12. 12

    Flutter:有没有更好的方法编写以下代码?

  13. 13

    有没有更好的方法编写业务逻辑以验证互斥代码?

  14. 14

    有没有更好的方法来实现此MATLAB代码?

  15. 15

    有没有更好的方法来重写此NumPy代码段

  16. 16

    有没有更好的方法来重写此NumPy代码段

  17. 17

    有没有更好的方法可以在Mocha中编写测试语句?

  18. 18

    有没有更好的方法可以在if语句中编写多个OR语句?

  19. 19

    有没有更好的方法可以在if语句中编写多个OR语句?

  20. 20

    有没有更简单的方式编写此代码?

  21. 21

    有没有其他替代方法可以编写此查询plsql?

  22. 22

    有没有更好的方法来编写将此代码插入到Clojure中的排序列表中的代码?

  23. 23

    有没有更好的方法来编写此正则表达式条件查找函数?

  24. 24

    有没有更好的循环代码的方法?

  25. 25

    有没有一种方法可以链接我的菜单按钮,以便可以滚动到同一网页上的不同部分?

  26. 26

    有没有一种方法可以覆盖UITextView UIKeyInput,以便可以从超级视图中输入文本?

  27. 27

    有没有更好的方法可以重用绘图Matplotlib?

  28. 28

    有没有一种方法可以在php中优化此mysql代码?

  29. 29

    有没有更好的方式编写此if-else语句?

热门标签

归档