代码之家  ›  专栏  ›  技术社区  ›  Ankush paul

如何在关系模型中插入与第一个模型(父模型)数据库实体相关的记录

  •  0
  • Ankush paul  · 技术社区  · 7 年前

    这里,我有两个独立的模型“用户”模型和“事件”模型。事件模型与用户模式相关。现在我想做的是,当用户填写事件表单并提交时,应该只针对该用户创建事件记录。

    视图。py公司

    class EventCreationForm(View):
        template_eventcreationform = 'eventcreationform.html'
        form_class = EventForm
    
        def get(self, request):
            form = self.form_class(None)
            return render(request, self.template_eventcreationform, {'form': form})
    
        def post(self, request):
            # data is here
            form = self.form_class(request.POST)
            if form.is_valid():
                event = form.save(commit=False)
                user = User.objects.get(
                    #######################################################
                    #####            currently logged user            #####
                    ###   what should i put here to get current user?   ###
                    #######################################################
                )
                form.user = user.email
                event_name = form.cleaned_data.get('event_name')
                event_date_time = form.cleaned_data.get('event_date_time')
                event_address = form.cleaned_data.get('address')
                event.save()
                message = 'Event added'
                return render(request, 'base.html', {'message': message})
            else:
                message = 'Invalid form data, try again'
                form = self.form_class(None)
                return render(request, self.template_eventcreationform, {'message': message, 'form': form})
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Alasdair    7 年前

    首先,您可能想使用 LoginRequiredMixin 这样,只有登录的用户才能访问该视图。

    from django.contrib.auth.mixins import LoginRequiredMixin
    
    class EventCreationForm(LoginRequiredMixin, View):
    

    您可以使用访问登录用户 self.request.user

        if form.is_valid():
            event = form.save(commit=False)
            event.user = self.request.user
            event.save()
            message = 'Event added'
            return redirect('/success-url/')
    

    请注意,最好在保存事件后重定向,以防止表单提交重复。

    请注意,您正在复制 FormView CreateView 。如果使用这些,就不必编写那么多代码。

    class EventCreationForm(LoginRequiredMixin, CreateView):
        template_name = 'eventcreationform.html'
        form_class = EventForm
        success_url = '/success-url/'  # form_valid() will redirect here
    
        def form_valid(self, form):
            form.instance.user = self.request.user
            return super(EventCreationForm, self).form_valid(form)