Django-countries как добавить поле сериализатора
Я пытаюсь добавить поле CountryField в сериализатор для процесса Register (используя dj-rest-auth) и не могу найти правильный способ его реализации.
Все ответы, которые я нашел, просто говорят использовать то, что написано в документации, но мне это не помогает, возможно, я просто делаю это неправильно.
Вот что говорится в документации по django-countries:
from django_countries.serializers import CountryFieldMixin
class CountrySerializer(CountryFieldMixin, serializers.ModelSerializer):
class Meta:
model = models.Person
fields = ('name', 'email', 'country')
Мне нужно добавить поле здесь:
class CustomRegisterSerializer(RegisterSerializer, CountryFieldMixin):
birth_date = serializers.DateField()
country = CountryField()
gender = serializers.ChoiceField(choices=GENDER)
# class Meta:
# model = User
# fields = ('country')
# Define transaction.atomic to rollback the save operation in case of error
@transaction.atomic
def save(self, request):
user = super().save(request)
user.birth_date = self.data.get('birth_date')
user.country = self.data.get('country')
user.gender = self.data.get('gender')
user.save()
return user
Я пробовал разные вещи, кроме этого, и ничего не помогло.
Для сериализатора вы импортируете CountryField модуль django_countries.serializer_fields, так:
from django_countries.serializer_fields import CountryField
class CustomRegisterSerializer(RegisterSerializer):
# …
country = CountryField()
# …
Если вместо этого вы хотите работать с Mixin (который будет использовать такое поле сериализатора CountryField), вы должны указать CountryFieldMixin перед RegisterSerializer, иначе он не переопределит метод .build_standard_field(…).
Таким образом, вы наследуете с:
class CustomRegisterSerializer(CountryFieldMixin, RegisterSerializer):
# …
В этом случае вам следует не указывать поле сериализатора country вручную, так как это сделает миксин неэффективным.