简体   繁体   English

如何在DetailView的post方法中详细查看pk? (姜戈)

[英]How to detailview pk in post method in DetailView? (Django)

In my detailView I have 2 methods get_context_data and post .在我的 detailView 中,我有两种方法get_context_datapost In get_context_data I can get the detailView pk with self.object.pk but how can I get it in the post method?get_context_data我可以使用self.object.pk获取 detailView pk,但是如何在post方法中获取它?

[ updated ] [ 更新 ]

here is the view这是视图

class Class_detailView(LoginRequiredMixin, DetailView):
    login_url = '/'
    model = Class
    template_name = "attendance/content/teacher/class_detail.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['attendance_form'] = AttendanceForm(current_class_pk=self.object.pk) # pass data to form via kwargs 
        return context

    def post(self, request, *args, **kwargs):
        if request.method == "POST":
            attendance_form = AttendanceForm(request.POST)
            if attendance_form.is_valid():
                attendance_form.instance.teacher = self.request.user
                attendance_form.save()
                return redirect('class-detail', pk=self.kwargs.get('pk'))

form形式

class AttendanceForm(forms.ModelForm):
    class Meta:
        model = Attendance
        fields = ['student',]

    def __init__(self, *args, **kwargs):
        current_class_pk = kwargs.pop('current_class_pk')
        super(AttendanceForm, self).__init__(*args, **kwargs)
        current_student = Class.objects.get(id=current_class_pk)
        self.fields['student'].queryset = current_student.student

I want to get the pk and pass it to the form when the post request is called.我想在调用 post 请求时获取 pk 并将其传递给表单。 How can I do it?我该怎么做?

did you try this:你试过这个吗:

def post(self, request, *args, **kwargs):
    if request.method == "POST":
        attendance_form = AttendanceForm(request.POST, current_class_pk=self.kwargs.get('pk'))
        if attendance_form.is_valid():
            attendance_form.instance.teacher = self.request.user
            attendance_form.save()
            return redirect('class-detail', pk=self.kwargs.get('pk'))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM