В моей модели User у меня есть поле "Страна", которое является полем ForeignKey для моей модели Country.
В браузере API DRF я хочу показать два значения из этого:
Название страны через SlugRelatedField:
"country": "Zimbabwe",
и ссылку на эту же страну в таблице стран:
"country": "http://virticl.api/countries/249/",
Возможно ли это?
ОБНОВЛЕНИЕ:
Вот мнение, хотя я думаю, что это не очень полезно ...
class UserList(ListCreateAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetail(RetrieveUpdateAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = User.objects.all()
serializer_class = UserSerializer
Моя модель и миксин ...
class AddressPhoneModelMixin(models.Model):
"""
Abstract class to add address and phone fields to a model.
"""
address = models.TextField(
verbose_name=_('Address'),
blank=True,
null=True,
)
country = models.ForeignKey(
Country,
on_delete=models.SET_NULL,
verbose_name=_('Country'),
blank=True,
null=True,
)
phone_number = PhoneNumberField(
verbose_name=_('Phone'),
blank=True,
null=True,
)
mobile_number = PhoneNumberField(
verbose_name=_('Mobile Phone'),
blank=True,
null=True,
)
fax_number = PhoneNumberField(
verbose_name=_('Fax'),
blank=True,
null=True,
)
class Meta:
abstract = True
class User(AddressPhoneModelMixin, AbstractUser):
objects = UserProfileManager()
type = models.CharField(
max_length=25,
)
title = models.CharField(
max_length=100,
blank=True,
null=True,
)
timezone = models.CharField(
max_length=50,
)
birthdate = models.DateTimeField(
blank=True,
null=True,
)
is_verified = models.BooleanField(
default=False,
)
email = models.EmailField(
unique=True,
db_index=True,
)
Мои сериализаторы / миксины:
class AddressPhoneSerializerMixin(serializers.Serializer):
address = serializers.CharField(
max_length=1000,
style={'base_template': 'textarea.html'},
)
country = serializers.SlugRelatedField(
read_only=True,
slug_field='country_name',
)
phone_number = serializers.CharField(
max_length=31,
)
mobile_number = serializers.CharField(
max_length=31,
)
fax_number = serializers.CharField(
max_length=31,
)
class Meta:
abstract = True
class UserSerializer(AddressPhoneSerializerMixin, serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name="users:user-detail")
class Meta:
model = User
fields = (
'id',
'url',
'type',
'username',
'first_name',
'last_name',
'email',
'address',
'country',
'phone_number',
'mobile_number',
'fax_number',
'is_superuser',
'is_staff',
'is_active',
'is_verified',
'date_joined',
'last_login',
)
Кроме того, использование SlugRelatedField для отображения названия страны вместо идентификатора должно быть read_only - либо это, либо мне нужно переопределитьget_queryset.Я не уверен, как будет выглядеть get_queryset, но это ли способ отображения страны при создании или обновлении форм в браузере API?Может кто-нибудь привести пример get_queryset?