在这里,我有两个单独的模型“用户”模型和“事件”模型。事件模型与用户模式有关。现在我想要做的是,当用户填写事件表单并提交时,应该只创建与该用户相关的事件记录。
视图.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})
首先,您可能希望使用,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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句