Объект «Менеджер» не имеет атрибута __getitem__ - PullRequest
0 голосов
/ 10 февраля 2020

Я использую Django rest Framework для создания приложения, я хочу менять язык приложения, когда пользователь хочет его изменить, поэтому я сделал два сериализатора для каждого динамического c заголовка, который у меня есть в приложении один для engli sh и другой для arabi c, я хочу дать еще один параметр под названием lang, чтобы изменить отклик представления API для использования другого сериализатора

==> models.py

class RewardSubCategory(models.Model):
    category = models.ForeignKey(
        'RewardCategory', on_delete=models.DO_NOTHING)
    title = models.CharField(max_length=200)
    ar_title = models.CharField(max_length=200, null=True, blank=True)
    picture = models.ImageField(upload_to=file_upload)

    def __unicode__(self):
        return str(self.title)

class RewardCategory(models.Model):
    title = models.CharField(max_length=200)
    ar_title = models.CharField(max_length=200, null=True, blank=True)
    picture = models.ImageField(upload_to=file_upload)

    def __unicode__(self):
        return str(self.title)

==> serializers.py

class RewardSubCategorySerializer(serializers.ModelSerializer):
window = serializers.SerializerMethodField()
affilates = serializers.SerializerMethodField()

class Meta:
    model = models.RewardSubCategory
    fields = ('id', 'category', 'title', 'picture', 'window', 'affilates')
    depth = 1

def get_window(self, obj):
    windows = models.SubCategoryWindow.objects.filter(
        sub_category=int(obj.id))
    data = SubCategoryWindowSerializer(windows, many=True).data
    return data

def get_affilates(self, obj):
    affilates = models.affilate.objects.filter(sub_category=int(obj.id))
    data = AffilateSerializer(affilates, many=True).data
    return data


class ArabicRewardSubCategorySerializer(serializers.ModelSerializer):
window = serializers.SerializerMethodField()
affilates = serializers.SerializerMethodField()

class Meta:
    model = models.RewardSubCategory
    exclude = ('title')
    depth = 1

def get_window(self, obj):
    windows = models.SubCategoryWindow.objects.filter(
        sub_category=int(obj.id))
    data = SubCategoryWindowSerializer(windows, many=True).data
    return data

def get_affilates(self, obj):
    affilates = models.affilate.objects.filter(sub_category=int(obj.id))
    data = AffilateSerializer(affilates, many=True).data
    return data

==> views.py

class RewardSubCategoryViewSet(FilterSearch, viewsets.ReadOnlyModelViewSet):
"""
    ................. API V1 .................
    Returns subcategories
"""
authentication_classes = (TokenAuthentication,)
permission_classes = (permissions.LoggedInPermission,)
serializer_class = serializers.RewardSubCategorySerializer
queryset = models.RewardSubCategory.objects
filter_fields = ('category')

def get_serializer_class(self):
    lang = self.request.query_params.get('lang')
    if lang == "ar":
        return serializers.ArabicRewardSubCategorySerializer
    return serializers.RewardSubCategorySerializer

==> ошибка при вводе в параметры запроса почтальона lang = ar

                    TypeError at /v1/reward-subcategories/
            'Manager' object has no attribute '__getitem__'

            Request Method: GET
            Request URL: http://127.0.0.1:8000/v1/reward-subcategories/?lang=ar
            Django Version: 1.11.23
...