Использование django rest-farmework для реализации API. Проблема не была решена: как передать параметры через view.py на serializers.py? конкретный код следующим образом:django rest-farmework вложенные отношения для передачи параметров
models.py
class Category(models.Model):
name = models.CharField(max_length=30)
amount = models.IntegerField()
class Source(models.Model):
name = models.CharField(max_length=50)
rss_link = models.URLField()
amount = models.IntegerField()
# ForeignKey
category = models.ForeignKey(Category)
views.py
class CategoryListView(APIView):
def get(self, request):
# How should this variable be passed to serializers.py?
num_parameter = request.GET.get("num")
category = Category.objects.all()
serializers = CategorySerializers(category, many=True)
return Response(serializers.data)
serializers.py
class SourceSerializer(serializers.ModelSerializer):
class Meta:
model = Source
fields = ("id","name","amount")
class CategorySerializer(serializers.ModelSerializer):
source_set = serializers.SerializerMethodField('get_sources')
def get_sources(self, category):
sources = category.source_set.filter(amount=0)
# I expect the code as follows,the "num_parameter" from views.py
# sources = category.source_set.filter(amount=num_parameter)
return SourceSerializer(instance=sources, many=True).data
class Meta:
model = Category
fields = ("id", "name", "amount", "source_set")
Программа погонных результаты:
[
{
"id": 1,
"name": "study",
"amount": "0",
"source": [
{
"id": 34,
"name": "java",
"amount": "0"
},
{
"id": 35,
"name": "python",
"amount": "0"
}
]
}
]
В аннотированный, модифицировали следующий код:
sources = category.source_set.filter(amount=0)
к
sources = category.source_set.filter(amount=num_parameter)
"num_parameter" от "CategoryListView", как передать его "CategorySerializer"?
Заранее спасибо.
результат '' self.context'' '' {} '', поэтому выполняется '' self.context ['request'] '' is error "Exception Value: 'request'". – jason
Мой плохой. Обновлено. Вам нужно вручную передать контекст. – JoseKilo
Проблема решена вашей помощью, большое спасибо! @JoseKilo – jason