Amer Abdallah نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 (معدل) أحاول الحصول على المستخدم الحالي (الذي قام بعمل الطلب request) في داخل نموذجserializers، لقد جربت الكود التالي، ولكنه لا يعمل. class PostSerializer(serializers.ModelSerializer): class Meta: model = Post def save(self): user = self.context['request.user'] كيف يمكنني الوصول إلى request.user من صنف Serializer الخاص بي؟ تم التعديل في 24 سبتمبر 2021 بواسطة Amer Abdallah 3 اقتباس
1 سامح أشرف نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 لا يمكنك الوصول إلى مستخدم الطلب مباشرة. تحتاج إلى الوصول إلى كائن الطلب ، ثم إحضار سمة المستخدم. user = self.context['request'].user والطريقة الأكثر أمانًا (لا يظهر خطأ KeyError أو خطأ AttributeError) كالتالي: user = None request = self.context.get("request") if request and hasattr(request, "user"): user = request.user كما يوفر Django-Rest-Framework طريقة أسهل للوصول إلى المستخدم الحالي من خلال إستخدام التابع CurrentUserDefault كالتالي: from rest_framework.fields import CurrentUserDefault class PostSerializer(serializers.ModelSerializer): class Meta: model = Post def save(self): user = CurrentUserDefault() # الحصول على المستخدم الحالي 2 اقتباس
0 محمد أبو عواد نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 كما ذكر سامح يمكنك استخدام CurrentUserDefault. إذا كنت لا تريد عمل override لدالة save فيمكنك استخدام الكود كالتالي from rest_framework import serializers class PostSerializer(serializers.ModelSerializer): user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()) class Meta: model = Post 1 اقتباس
0 Ali Haidar Ahmad نشر 24 سبتمبر 2021 أرسل تقرير نشر 24 سبتمبر 2021 يمكنك أيضاً تمرير request.user عند استدعاء الدالة (...)save. داخل ال view: class EventSerializer(serializers.ModelSerializer): class Meta: model = models.Event exclude = ['user'] class EventView(APIView): def post(self, request): es = EventSerializer(data=request.data) if es.is_valid(): es.save(user=self.request.user) return Response(status=status.HTTP_201_CREATED) return Response(data=es.errors, status=status.HTTP_400_BAD_REQUEST) وهذا هو النموذج: class Event(models.Model): user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE) date = models.DateTimeField(default=timezone.now) place = models.CharField(max_length=255) 1 اقتباس
السؤال
Amer Abdallah
أحاول الحصول على المستخدم الحالي (الذي قام بعمل الطلب request) في داخل نموذجserializers، لقد جربت الكود التالي، ولكنه لا يعمل.
كيف يمكنني الوصول إلى request.user من صنف Serializer الخاص بي؟
تم التعديل في بواسطة Amer Abdallah3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.