所以我在下面有这个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()方法,但我的问题是将变量提供给查询集以使此查询起作用。
答案 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)