【问题标题】:Create a new record using another for default values使用另一个默认值创建新记录
【发布时间】:2022-11-16 21:15:03
【问题描述】:

实现用户选择现有记录的功能的最佳方式是什么作为模板为了创造一个新的?

理想情况下,我想要一个 ListView 中所有现有记录的列表,并且用户单击这些记录之一并被带到 CreateView,其中字段被填充为所选记录的值作为新的默认值,起始值。

这个方法本质上是一个标准的 ListView-to-UpdateView 但是 save 方法会创建一个新记录而不是更新吗?

模型.py

class movies(models.Model):
    fk_user = models.ForeignKey(User, default='1', on_delete=models.CASCADE)
    title = models.CharField(max_length=250)
    fk_producer = models.ForeignKey(producers, default='1', on_delete=models.CASCADE)
    
    def __str__(self):
        return self.title

    class Meta:
        ordering = ('-id', )

视图.py

  class movies_create(LoginRequiredMixin, CreateView):
        model = movies
        fields = ['title', 'fk_producer']
        template_name = 'movies_create.html'

        def form_valid(self, form):
            form.instance.fk_user = self.request.user
            form.save()
            # return super().form_valid(form)
            return HttpResponseRedirect(self.request.path_info)

        def get_form_class(self):
            if self.request.GET.get('copy_object'):
            copy_object = movies.objects.get(id=self.request.GET.get('copy_object'))
            return MyFormClass(instance=copy_object)
        else:
            return MyFormClass

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    有几种方法可以做到这一点。这只是一个简单的想法:

    获取您想要作为模板的对象的 ID,并将其作为 GET 参数传递。例如https://example.com/create/?copy_object=7

    然后,在你的 views.py 上,使用函数 get_form_class() 代替 form_class

    class MyCreateView(CreateView):
        def get_form_class(self):
            if self.request.GET.get('copy_object'):
                copy_object = MyModel.objects.get(id=self.request.GET.get('copy_object'))
                return MyFormClass(instance=copy_object)
            else:
                return MyFormClass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2011-11-01
      • 2013-03-30
      • 2021-06-08
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      相关资源
      最近更新 更多