Я использую 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