为了账号安全,请及时绑定邮箱和手机立即绑定

将两个 pk 传递到 url 中

将两个 pk 传递到 url 中

摇曳的蔷薇 2023-09-12 17:10:27
如果更改“学年”值,则不会出现 404。我希望仅当 'school_year' 和 'pk' 的 url 值都正确时才显示数据。例如,如果您有数据 (School_Year = 2020, pk = 33),当您输入 url https://190.0.1/190/190/33和https://190.0.1/190/whatthell/33时 ,两者都是相同的结果。但是,我想仅当两个值都正确时才显示结果。我真的不知道我解释是否正确,谢谢。view.pyclass StudentDetail(DetailView,FormView):        model = Student        template_name = 'student/member.html'        context_object_name = 'student'        form_class = AddConsultation            def get_context_data(self, **kwargs):            context = super().get_context_data(**kwargs)            context['pk'] = Student.objects.filter(pk=self.kwargs.get('pk'))            return contexturl.pypath('student/<school_year>/<pk>/', views.StudentDetail.as_view(), name='student_detail'),html链接<a href='{% url 'student_detail' student.school_year student.pk %}'>models.pyclass Student(models.Model):    school_year = models.CharField(        max_length=10,        choices=SCHOOL_YEAR_CHOICES,        default='2021N',        verbose_name='school year'    )    ... etc 
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我将使用以下方法删除get_context_data并覆盖:get_objectget_object_or_404


class StudentDetail(DetailView, FormClass):

    model = Student

    template_name = 'student/member.html'

    context_object_name = 'student'

    form_class = AddConsultation


    def get_object(self, queryset=None):

        return get_object_or_404(Student, pk=self.kwargs['pk'], school_year=self.kwargs['school_year'])

其他解决方案可能是:


class StudentDetail(DetailView, FormClass):

    model = Student

    template_name = 'student/member.html'

    context_object_name = 'student'

    form_class = AddConsultation

    slug_field = 'school_year'

    slug_url_kwarg = 'school_year'

    query_pk_and_slug = True

但我发现第一个不那么神奇:)


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信