【问题标题】:Django creating new object when url is being entered输入 url 时 Django 创建新对象
【发布时间】:2020-07-14 03:07:58
【问题描述】:

我在这里有一个 django 帖子

    def post(self, *args, **kwargs):
        self.object = self.get_queryset()

        approve_or_reject = self.request.POST.get('approve', None)
        book_pk = self.request.POST.get('data_pk', None)
        loan = self.request.POST.get('mark_loan', None) 
        cancel = self.request.POST.get('mark_cancel', None) 

        reserve_book = self.model.objects.filter(
            pk=book_pk,
            recipient=self.get_object(),
        )

        if loan == 'loan':
            titles = Title.objects.get(pk=book_pk)
            for title in titles.titlecopy_set.filter(in_rental=False):
                for status in title.title.reservedbooks_set.filter(recipient=self.get_object()):
                    status.mark_loan = False
                    status.save()
                    break
                title.rental_set.create(
                    recipient=self.get_object(),
                    borrowed_on=timezone.now(),
                    librarian=self.request.user.manager,
                )
                title.in_rental = True
                title.save()
                break

这在我保存保留书时有效,但是之后当我刷新 url(而不是 f5)时,它会创建另一个。知道这里出了什么问题吗?谢谢

【问题讨论】:

    标签: django python-3.x crud


    【解决方案1】:

    试试这个方法

    if loan == 'loan':
                titles, created = Title.objects.get(pk=book_pk)
                for title in titles.titlecopy_set.filter(in_rental=False):
                    for status in title.title.reservedbooks_set.filter(recipient=self.get_object()):
                        status.mark_loan = False
                        status.save()
                        break
                    title.rental_set.get_or_create(
                        recipient=self.get_object(),
                        borrowed_on=timezone.now(),
                        librarian=self.request.user.manager,
                    )
    

    【讨论】:

    • 谢谢@bmons,请问titles, created = Title.objects.get(pk=book_pk)在这里有什么用处,尤其是created
    • 输出将是一个元组,所以你可以这样使用它
    猜你喜欢
    • 2012-11-07
    • 2022-01-24
    • 2014-10-07
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多