将变量传递给django查询集

时间:2017-06-22 01:00:35

标签: mysql django django-rest-framework jointable

所以我在下面有这个urlset。在urlset中有两个url将参数放入url并将其传递到apiviw。

urlpatterns = [
    url(r'^([0-9]{4})/([0-9]{1,2})/test/$', views.DuperView.as_view()),
    url(r'^test/([0-9]{4})/([0-9]{2})/$', views.SuperView.as_view()),
    url(r'^test/', views.TestView.as_view()),
]

这是APIView所有内容都传递进去。

class DuperView(APIView):
    queryset = models.DuperModel.dupers.duperdeduper()

    def get(self, request, year, month, format=None):
        an_apiview = [
            year,
            month,
            ]

        return Response({'http_method': 'GET', 'api_view': an_apiview})

在url中定义的第一个参数([0-9] {4})作为年份传递给get方法,第二个定义为([0-9] {1,2})的参数传递月份。

这是我的模型,模型管理器和模型查询集,这对应于。

class DuperQuerySet(models.QuerySet):
    def duperdeduper(self):
        return self.filter(year='2000')

class DuperModelManager(models.Manager):
    def get_queryset(self):
        return DuperQuerySet(self.model, using=self._db)

    def duperdeduper(self):
        return self.get_queryset().authors()

class DuperModel(models.Model):
    year = models.ForeignKey(YearModel)
    month = models.ForeignKey(MonthModel)
    name = models.CharField(max_length=255)

    dupers = DuperModelManager()

我想知道是否有办法以某种方式将年和月参数传递给模型,这样我在处理模型中的数据时可以使用它?

SELECT * FROM dupertable, yeartable WHERE year='variablevaluepassedon'

这种功能是否可行?我知道我可以在我的查询集上使用.filter()方法,但我的问题是将变量提供给查询集以使此查询起作用。

1 个答案:

答案 0 :(得分:2)

正如Daniel所提到的,你应该从视图中覆盖get_queryset方法。从那里你可以传递你从网址获得的参数。

<script src="/js/libjs.js"></script>
<script>
    let c = libjs.collect([1, 123, 123, 1231, 32, 4])
</script>

我使用GenericApiView添加了get_queryset方法。然后,您可以添加API所需的mixin。在这种情况下,我添加了ListModelMixin,它实现了一个get方法来检索元素列表。

您还应该在网址中引用您的参数:

class DuperView(GenericApiView, ListModelMixin):

    def get_queryset(self):
        year = self.kwargs.get('year')
        month = self.kwargs.get('month')

        return DuperModel.dupers.filter(month=month, year=year)