django-countries 如何添加序列化程序字段
django-countries how to add serializer field
我正在尝试将 CountryField 添加到注册进程的序列化程序(使用 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
用户模型
class User(AbstractUser):
"""
Default custom user model
"""
name = models.CharField(max_length=30)
birth_date = models.DateField(null=True, blank=True)
country = CountryField(null=True, blank=True, blank_label='Select country')
gender = models.CharField(choices=GENDER, max_length=6, null=True, blank=True)
...
除此之外我尝试了不同的方法,但没有任何效果。
对于序列化程序,您导入 django_countries 的 <code>CountryField
。serializer_fields模块,所以:
from django_countries.serializer_fields import <strong>CountryField</strong>
class CustomRegisterSerializer(RegisterSerializer):
# …
country = <strong>CountryField()</strong>
# …
如果您想要使用 Mixin
(它将使用这样的 CountryField
序列化程序字段),您应该在 CountryFieldMixin
before RegisterSerializer
,否则不会覆盖.build_standard_field(…)
方法。
您因此继承了:
class CustomRegisterSerializer(<strong>CountryFieldMixin</strong>, RegisterSerializer):
# …
在那种情况下,您应该不手动指定country
序列化程序字段,因为这会使混合无效。
我正在尝试将 CountryField 添加到注册进程的序列化程序(使用 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
用户模型
class User(AbstractUser):
"""
Default custom user model
"""
name = models.CharField(max_length=30)
birth_date = models.DateField(null=True, blank=True)
country = CountryField(null=True, blank=True, blank_label='Select country')
gender = models.CharField(choices=GENDER, max_length=6, null=True, blank=True)
...
除此之外我尝试了不同的方法,但没有任何效果。
对于序列化程序,您导入 django_countries 的 <code>CountryField
。serializer_fields模块,所以:
from django_countries.serializer_fields import <strong>CountryField</strong>
class CustomRegisterSerializer(RegisterSerializer):
# …
country = <strong>CountryField()</strong>
# …
如果您想要使用 Mixin
(它将使用这样的 CountryField
序列化程序字段),您应该在 CountryFieldMixin
before RegisterSerializer
,否则不会覆盖.build_standard_field(…)
方法。
您因此继承了:
class CustomRegisterSerializer(<strong>CountryFieldMixin</strong>, RegisterSerializer):
# …
在那种情况下,您应该不手动指定country
序列化程序字段,因为这会使混合无效。