首页 > 解决方案 > Django - 使用 pk_url_kwarg 选择性地查询模型

问题描述

考虑这两个模型并查看:

模型.py

class BHA_List(models.Model):
    well = models.ForeignKey(WellInfo, 'CASCADE', related_name='bha_list')
    bha_number = models.CharField(max_length=100)

class BHA_overall(models.Model):
    bha_number = models.ForeignKey(BHA_List, 'CASCADE', related_name='bha_overall')
    drill_str_name = models.CharField(max_length=111)
    depth_in = models.CharField(max_length=111)

视图.py

class BHA_UpdateView(UpdateView):
    model = BHA_overall
    pk_url_kwarg = 'pk_alt'
    form_class = BHA_overall_Form

据我了解,pk_url_kwarg = 'pk_alt'将查询并返回model = BHA_overall.

假设我使用了一个不同于CBVUpdateView,并且想要实现两个模型。所以是这样的: model = (BHA_overall, BHA_List)。有什么方法可以强制我pk_url_kwarg = 'pk_alt'只在 中查询和返回实例BHA_List,但强制我get_object()在 中返回对象BHA_overall?我CBV应该使用什么?

标签: pythondjangodjango-modelsdjango-views

解决方案


您可以只使用“查看”并定义发布和获取方法。大约是这样的:

class SomeView(View):
      model = BHA_List
      template_name = 'some.html'
      def get(request, **kwargs):
          overall = BHA_overall.objects.all()
          return render(request,
                        self.template_name,
                        locals())
      def get(request, **kwargs):
          return render(request, self.template_name, {})

推荐阅读