Jak dodać zalogowanego użytkownika w serializerze w DRF

W omawianym przeze mnie przykładzie użytkownik występuje jako klucz obcy w modelu magazynu tzn.

źródło pliku: backend/contracts/models/warehouse.py

class Warehouse(models.Model):
    warehouse_name = models.CharField(max_length=15, unique=True)
    warehouse_info = models.TextField(max_length=100)
    client = models.ForeignKey(ContractUser, on_delete=models.CASCADE)

    def __str__(self):
        return self.warehouse_name

Podczas tworzenia nowej instancji modelu magazynu użytkownik musi podać tylko nazwę nowego magazynu oraz informację o magazynie (np. lokalizację, czy inne przydatne informacje).

Jednakże do utworzenia instancji konieczne jest także podanie użytkownika, który jest „właścicielem” utworzonego magazynu.

Podaję użytkownika dodając go do kontekstu w widoku tzn.

źródło pliku: backend/api/views/warehouse.py

class WarehouseViewSet(viewsets.ModelViewSet):
    queryset = Warehouse.objects.all()
    serializer_class = WarehouseSerializer
    permission_classes = [permissions.IsAuthenticated]

    def get_serializer_context(self):
        context = super().get_serializer_context()
        context.update({"client": self.request.user})
        return context

Dodanego użytkownika można użyć podczas serializacji tzn.

źródło pliku: backend/api/serializers/warehouse.py

class WarehouseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Warehouse
        fields = ["warehouse_name", "warehouse_info"]

    def create(self, validated_data):
        validated_data["client"] = self.context["client"]
        warehouse = Warehouse.objects.create(**validated_data)
        return warehouse

Zalogowany użytkownik zostanie dodany „automatycznie” podczas tworzenia instancji modelu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

86 ÷ = 86