Объект 'JobSerializer' не имеет атрибута 'email', что я упускаю?

serializers.py

class JobSerializer(serializers.ModelSerializer):
    # image = Base64ImageField(max_length=None, 
    #                         use_url=True)
    # applicant = serializers.ForeignKe
    applicant = serializers.StringRelatedField(many=True)
    email = serializers.SerializerMethodField("get_username_from_user")
    company_name = serializers.SerializerMethodField("get_company_name_from_user")
    class Meta:
        model = Jobs
        fields = ['company_name', 'email',  'title', 'desc', 'image', 'price',  'category', 'applicant']
        # extra_kwargs = {"email": {"required": False}}




    def get_username_from_user(self, jobs):
        email = jobs.user.email
        return email

    def get_company_name_from_user(self, jobs):
        company_name = jobs.user.company_name
        return company_name

views.py

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def api_detail_jobs_view(request, id):
    try:
        jobs = Jobs.objects.get(id=id)
    except Jobs.DoesNotExist:
        data = {}
        data['response'] = "Job does not exist"
        return Response(data, status=status.HTTP_404_NOT_FOUND)

    
    if request.method == "GET":

        serializer = JobSerializer(jobs)
        user = request.user
        if user == serializer.email:
            data = {}
            auth_show = serializer
            data['title'] = auth_show.title 
            data['applicant'] = auth_show.applicant
            return Response(data)
        else:
            no_auth_show = serializer
            data = {}
            data['title'] = no_auth_show.title
            return Response(data)

Вот serializers.py, в котором включен 'email'. я знаю, что упускаю что-то очень четкое, но на это ушли часы :) так что любая помощь будет принята с благодарностью. Я пытаюсь показать "кандидатов" только тем пользователям, которые владеют "работой", но я не могу передать "email" из сериализатора в представление. Я не могу передать ни один атрибут из сериализатора в дикту данных.

Как показано в документации DRF, после сериализации объекта вы можете получить доступ к его полям через атрибут data. Таким образом, это будет выглядеть как serializer.data['email'].

И еще один совет: используйте ярлык Django get_object_or_404() вместо этого блока try/except. Удачи!

Вернуться на верх