【问题标题】:How do you delete all manytomany relationships in a model in form_valid?如何在 form_valid 中删除模型中的所有多对多关系?
【发布时间】:2021-03-12 21:45:09
【问题描述】:

我正在使用 Django 制作预订系统。我希望能够查看“取消”预订。这涉及将模型的参与者(多头)设置为 None 并将booked_by 设置为 none。我不想删除预订,因为其他人可能想稍后再预订。我想删除 BookingSlot 的多线程中所有关系的能力会起作用。我希望能够在 form_valid() 中执行此操作。

#views.py
class CancelBookingView(UpdateView):
    form_class = CancelBookingForm
    model = BookingSlot

    def form_valid(self, form):
        form.instance.booked_by = None #This works fine 
        form.instance.participants.all = None #This doesn't work
        return super().form_valid(form)

就你所见,我已经尝试过,它没有奏效。非常感谢您的帮助,谢谢!

#models.py
class BookingSlot(models.Model):
    start_time = models.TimeField("Start Time")
    end_time = models.TimeField("End Time")
    date = models.DateField("Date")
    location = models.ForeignKey(Court, on_delete=models.CASCADE)
    booked_by = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, default=None, blank=True, null=True, related_name="bookedBy_CustomerUser")
    participants = models.ManyToManyField(CustomUser, default=None, blank=True, related_name="participant_CustomerUser")

【问题讨论】:

    标签: django django-models django-views django-forms


    【解决方案1】:

    要从相关对象中删除所有对象,请使用clear() (Django Docs) 方法:

    form.instance.participants.clear()
    

    请注意,add()create()remove()clear()set() 都是 立即对所有类型的相关字段应用数据库更改。在 换句话说,没有必要在任何一端调用 save() 关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-24
      • 2010-12-21
      • 2016-05-06
      • 2019-03-03
      • 2018-06-27
      • 1970-01-01
      • 2023-01-27
      • 2016-04-12
      相关资源
      最近更新 更多