【问题标题】:Append data instead of replace with UpdateView Django附加数据而不是用 UpdateView Django 替换
【发布时间】:2019-09-17 09:17:18
【问题描述】:

简单的问题,每当我尝试更新我的视图时,在这种情况下,通过添加更多用户UpdateView 替换以前的记录并添加选定的记录。为避免这种情况,我需要选择那些已经在 db 中的和一个新的。如何避免替换,并将数据附加到db?

views.py

class AddPersonView(LoginRequiredMixin, UpdateView):

    model = Trip
    template_name = 'tripplanner/add_new_member.html'
    fields = ["profile"]
    success_url = '/'

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

urls.py

   path('trip/<int:pk>/add_person/', AddPersonView.as_view(), name='new-trip-member'),

【问题讨论】:

  • 我必须使用 UpdateView,因为这是对现有记录的操作,我想为用户提供追加新用户的可能性。
  • 你能添加url route文件吗,因为我想知道你是如何调用AddPersonView的
  • @SureshKumar 完成
  • 在调用AddPersonView 时,您需要将Trip 模型中记录的pk 传递到url 以更新记录。我认为您正在使用用户记录pk
  • @SureshKumar 很抱歉,您没有理解问题所在。一切都在这里工作。问题是,当我更新记录时,我想将数据附加到现有记录。默认UpdateView 替换这条记录。

标签: django django-generic-views


【解决方案1】:

我之前有同样的要求,但我使用的是 DRF 并且能够使其工作。在 django 中你可以试试下面的代码。

由于您提到需要添加多个用户,因此您必须将该字段设置为多对多或一对多(外键)。

下面的例子可能对你有帮助,它没有经过测试,根据你的需要修改

models.py

class Trip(models.Models):
    authors= models.ManyToManyField(User, related_name='authors') # list of users will be appended to this field

views.py

class AddPersonView(LoginRequiredMixin, UpdateView):

    model = Trip
    template_name = 'tripplanner/add_new_member.html'
    fields = ["profile"]
    success_url = '/'

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.authors.add(self.request.user)
        return super(AddPersonView,self).form_valid(form)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 2018-07-17
    • 2021-02-14
    • 2014-07-29
    • 2021-11-17
    • 2022-11-18
    • 2018-06-08
    • 2017-06-26
    相关资源
    最近更新 更多