【问题标题】:Function inside class not executed类内的函数未执行
【发布时间】:2020-11-29 19:18:01
【问题描述】:

我有一个需要执行的(CreateView)类中的方法,但我认为它没有被执行,实际上“保存”什么都不做,表“Card_id_user”是空的......有吗解决这个问题的方法?这是我views.py中的代码

class New_card_creation_view(CreateView):
    title = "AGGIUNGI CARD"
    model = Card
    template_name = "new_card.html"
    fields = ['card_title', 'description', 'expiration_date', 'column']

    def create_card_view(self, request):
        v = New_card_creation_view(request)
        v.create_card_view(request)
        if request.method == 'POST':
            form = CardCreationForm(request.POST or None)
            if form.is_valid:
                form = form.save(commit=False)
                form.save()
                nCard=Card_id_user(user_id=request.user.id, card_id= form.id)
                return render(request, 'board.html'),
            else:
                form = CardCreationForm()
                return render(request, 'new_card.html', {'form': form})
        else:
            form = CardCreationForm()
            return render(request, 'new_card.html', {'form': form})

    def get_context_data(self, **kwargs):
        context = super(New_card_creation_view, self).get_context_data(**kwargs)
        context.update({'title': self.title})
        return context

    def get_success_url(self):
        return reverse('board_view', args=(self.object.column.board.id,))


【问题讨论】:

  • 你为什么期望create_card_view被执行?
  • 因为 'Card' 已正确创建并存储在其表中。我以为我必须调用create_card_view,但我需要参数request,所以我不知道如何检索参数request
  • 不,这只是CreateView 的样板代码。它会自动制作表格等。
  • 不过我不太清楚什么你想把CreateView改成,你想添加什么“逻辑”?
  • 我必须在表 Card_id_user 中添加刚刚创建的卡的 ID,并且创建的用户拥有该卡

标签: python django database function class


【解决方案1】:

CreateView [Django-doc] 基本上只是一个简单的基于类的View [Django-doc],带有一些(很多)样板代码。因此,它旨在简化程序员的工作。通过添加像create_card_view 这样的方法,什么都没有 改变,因为这不是代码流的一部分。根据请求,会触发.get(…).post(…)等方法。

因此添加额外的方法不会改变任何东西。只会覆盖现有的,从而改变代码流。

如果您需要在表单保存后做一些事情,您可以使用.form_valid(…) method [Django-doc]

class New_card_creation_view(CreateView):
    title = "AGGIUNGI CARD"
    model = Card
    template_name = "new_card.html"
    fields = ['card_title', 'description', 'expiration_date', 'column']

    def form_valid(self, form):
        response = super().form_valid(form)
        Card_id_user(user_id=self.request.user.pk, card_id=self.object.pk)
        return response

    def get_context_data(self, **kwargs):
        return super().get_context_data(*args, **kwargs, title=self.title)

    def get_success_url(self):
        return reverse('board_view', args=(self.object.column.board.id,))

【讨论】:

  • 我不知道我可以修改 django 的方法。谢谢,下次会注意的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2013-07-31
  • 2021-02-10
  • 2018-01-19
  • 2020-07-16
  • 2013-11-29
相关资源
最近更新 更多