将变量传递给 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/$',
]
所以我在下面设置了这个 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/$',
]