lord stock
lord stock

Reputation: 1211

Got AttributeError when attempting to get a value for field `phone_number` on serializer

AttributeError:Got AttributeError when attempting to get a value for field phone_number on serializer ListBusCompanyStaffSerializer. Bascially I have two models User and BusCompanyStaff, User consists of phone_number field BusCompanyStaff consists of following models fields

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
    )

I basically wants to list particular BusCompanyStaff from BusCompany so here is my serializer I tried till now

class ListBusCompanyStaffSerializer(serializers.ModelSerializer):
    position = serializers.CharField()

    class Meta:
        model = BusCompanyStaff
        fields = (
            'id',
            'phone_number',
            'position',
            'email',
        )

there is defintely Error as BusCompanyStaff dont consist of phone_number field but requirement is to put User phone number and email Here is my rest of code in views.py and 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()

how can I serialize in this format

id  ,
phone_number    ,
position,
email,

Upvotes: 0

Views: 37

Answers (1)

Davit Tovmasyan
Davit Tovmasyan

Reputation: 3588

You can do it this way:

class ListBusCompanyStaffSerializer(serializers.ModelSerializer):
    ...
    phone_number = serializers.CharField(source='user.phone_number')

    class Meta:
        model = BusCompanyStaff
        fields = (
            ...
            'phone_number',
        )

Upvotes: 1

Related Questions