#python #django #django-models #serialization #django-rest-framework
#python #django #django-модели #сериализация #django-rest-framework
Вопрос:
Ошибка атрибута: ошибка атрибута при попытке получить значение для поля phone_number
в сериализаторе ListBusCompanyStaffSerializer
. В основном у меня есть две модели User
и BusCompanyStaff
User
состоит из поля phone_number BusCompanyStaff состоит из следующих полей моделей
class BusCompanyStaff(BaseModel):
user = models.OneToOneField(
BusCompanyUser,
on_delete=models.CASCADE
)
position = models.ForeignKey(
StaffPosition,
on_delete=models.SET_NULL,
null=True,
related_name='position'
)
created_by = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='created_by'
)
staff_of = models.ForeignKey(
BusCompany,
on_delete=models.CASCADE
)
Я в основном хочу перечислить конкретный BusCompanyStaff из BusCompany, так что вот мой сериализатор, который я пробовал до сих пор
class ListBusCompanyStaffSerializer(serializers.ModelSerializer):
position = serializers.CharField()
class Meta:
model = BusCompanyStaff
fields = (
'id',
'phone_number',
'position',
'email',
)
существует определенная ошибка, поскольку BusCompanyStaff не состоит из поля phone_number, но требуется указать User
номер телефона и адрес электронной почты
Вот мой остальной код в views.py и usecases.py
#usecases.py
class ListBusCompanyStaffUseCase(BaseUseCase):
def __init__(self, bus_company: BusCompany):
self._bus_company = bus_company
def execute(self):
self._factory()
return self._bus_company_staffs
def _factory(self):
self._bus_company_staffs = BusCompanyStaff.objects.filter(staff_of=self._bus_company)
#views.py
class ListBusCompanyStaffView(generics.ListAPIView):
serializer_class = bus_company_user_serializers.ListBusCompanyStaffSerializer
def get_bus_company(self):
return GetBusCompanyUseCase(
bus_company_id=self.kwargs.get('bus_company_id')
).execute()
def get_queryset(self):
return ListBusCompanyStaffUseCase(
bus_company=self.get_bus_company()
).execute()
как я могу выполнить сериализацию в этом формате
id ,
phone_number ,
position,
email,
Ответ №1:
Вы можете сделать это следующим образом:
class ListBusCompanyStaffSerializer(serializers.ModelSerializer):
...
phone_number = serializers.CharField(source='user.phone_number')
class Meta:
model = BusCompanyStaff
fields = (
...
'phone_number',
)
Комментарии:
1. есть ли способ, которым я могу передать
extra_kwargs = {'phone_number':{'source':'?'}
?2. не уверен, вы можете попробовать сделать следующее
extra_kwargs = {'phone_number':{'source': 'user.phone_number'}
3. получил эту ошибку, когда я попытался в extra_kwargs
Field name
user.phone_number`недопустимо для модели. `BusCompanyStaff