#django #serialization #django-rest-framework
#django #сериализация #django-rest-framework
Вопрос:
У меня есть два таких сериализатора.
class CourseSerializer(serializers.ModelSerializer):
pk = serializers.IntegerField(read_only=True)
name = serializers.CharField(required=True, max_length=30, allow_blank=False)
chapters = serializers.SerializerMethodField()
def get_chapters(self, obj):
queryset = Chapter.objects.all().filter(course=obj.pk)
serializer_class = ChapterSerializer(queryset, many=True)
return serializer_class.data
class ChapterSerializer(serializers.ModelSerializer):
pk = serializers.IntegerField(read_only=True)
name = serializers.CharField(required=True, max_length=30, allow_blank=False)
course = serializers.StringRelatedField()
cards_count = serializers.SerializerMethodField()
cards_learned_count = serializers.SerializerMethodField()
cards_still_to_go = serializers.SerializerMethodField()
cards_not_learned = serializers.SerializerMethodField()
def get_cards_learned_count(self, obj):
user = None
request = self.context.get("request")
if request and hasattr(request, "user"):
user = request.user
queryset = Card.objects.all().filter(chapter=obj.pk)
card_count = 0
for q in queryset:
card_detail = UserCardDetail.objects.all().filter(card=q, user=user, learned=True)
card_detail.count()
card_count = card_detail.count()
return card_count
Теперь, когда я получаю сериализатор курса вместо получения правильных значений в поле главы, я получаю нули, но когда я вызываю сериализатор главы, я получаю правильные значения.
Я заметил, что MethodField
работает с obj
— однако разве это не должно быть передано уже?
Есть ли что-то дополнительное, что я должен передать в поле главы?
Редактировать: выходные и ожидаемые выходные
данные
{
"name": "Example 1",
"pk": 32,
"locked": false,
"chapters": [
{
"pk": 15,
"name": "Transformatori",
"course": "Tesit",
"cards_count": 5,
"cards_learned_count": 0,
"cards_still_to_go": 0,
"cards_not_learned": 0,
"favorite_cards": 0
},
],
},
ожидаемый результат
{
"name": "Example 1",
"pk": 32,
"locked": false,
"chapters": [
{
"pk": 15,
"name": "Transformatori",
"course": "Tesit",
"cards_count": 5,
"cards_learned_count": 3,
"cards_still_to_go": 0,
"cards_not_learned": 2,
"favorite_cards": 1
},
],
},
Комментарии:
1. Я не уверен, что это проблема, но разве это не должно быть
course_id=obj.pk
илиcourse=obj
, нетcourse=obj.pk
?2. @JonathanRichards Я изменил это, но все равно не повезло. Я добавил образец вывода.