将变量传递给 Django 查询集

Passing variable to a django queryset

所以我在下面设置了这个 url。在 url 集中有两个 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() 方法,但我的问题是将变量获取到查询集以使该查询工作。

正如 Daniel 提到的那样,您应该从您的视图中覆盖 get_queryset 方法。从那里您可以传递从 url.

获得的参数
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)

我已经使用 GenericApiView 添加了 get_queryset 方法。然后,您可以为 API 添加所需的混音。在这种情况下,我添加了 ListModelMixin,它实现了一个获取元素列表的方法。

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

urlpatterns = [
    url(r'^(?P<year>[0-9]{4})/(?P<month>[0-9][0-9]{1,2})/test/$', 
]