Files
eggs-backend/core/apps/eggs/serializers/add_courier.py
husanjon ab73d05ecc
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
gold eggs backend
2026-04-15 08:59:36 +02:00

84 lines
2.4 KiB
Python

from django.core import exceptions
from rest_framework import serializers
from core.http.models import User
from core.apps.eggs import models
from core.apps.eggs.serializers import CourierHistorySerializer
class AddCourierSerializer(serializers.ModelSerializer):
courier_id = serializers.SerializerMethodField()
class Meta:
model = User
fields = (
"courier_id",
"id",
"first_name",
"last_name",
"phone",
"username",
"role",
"avatar",
"password",
)
def create(self, validated_data):
validated_data["role"] = "courier"
user = User.objects.create_user(**validated_data)
courier = models.Courier.objects.create(user_id=user)
request_user = self.context["request"].user
created_who = f"{request_user.first_name} {request_user.last_name}"
models.History.objects.create(
content_object=courier,
action="courier_created",
created_who=created_who,
user_id=user,
created_by=f"{user.first_name} {user.last_name}",
reason="Kuryer qo'shildi",
avatar=user.avatar if user.avatar else None,
)
return user
def get_courier_id(self, obj):
courier = models.Courier.objects.filter(user_id=obj.id).first()
return courier.id if courier else None
class CouriersListSerializer(serializers.ModelSerializer):
courier_history = serializers.SerializerMethodField()
avatar = serializers.SerializerMethodField()
class Meta:
model = User
fields = (
"id",
"first_name",
"last_name",
"phone",
"username",
"avatar",
"role",
"courier_history",
"avatar",
)
def get_courier_history(self, obj):
try:
user = User.objects.get(id=obj.id, role="courier")
courier = models.Courier.objects.get(user_id=user.id)
courier_history = models.CourierHistory.objects.filter(
courier_id=courier.id
) # noqa
return CourierHistorySerializer(courier_history, many=True).data
except exceptions.ObjectDoesNotExist:
return []
def get_avatar(self, obj):
if obj.avatar:
return obj.avatar.url
return None