ฉันต้องการให้ผู้ใช้ทุกคนสามารถสร้างผลิตภัณฑ์ของตนเองด้วย RESTful API ของฉัน เพื่อจุดประสงค์นี้ ฉันได้สร้างมุมมองที่สืบทอด ListCreateAPIView ปัญหาคือผู้ใช้ควรสร้างเฉพาะผลิตภัณฑ์ที่เขา/เธอเป็นเจ้าของ ดังนั้นเมื่อมีการสร้างอินสแตนซ์ของโมเดลผลิตภัณฑ์ ฉันต้องการให้เจ้าของฟิลด์สอดคล้องกับผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
นี่คือรุ่นผลิตภัณฑ์ของฉัน
class Product(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=30)
เห็นได้ชัดว่าซีเรียลไลเซอร์ของฉันคือ:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = models.Product
และมุมมองของฉัน:
class ProductView(generics.ListCreateAPIView):
queryset = models.Product.objects.all()
serializer_class = serializers.ProductSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
#serializer.initial_data['owners'] = models.Person.objects.get(user__email=request.user).user_id
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
อย่างที่คุณเห็น ฉันพยายามแก้ไข "initial_data" แต่เป็น QueryDict ซึ่งไม่เปลี่ยนรูป อีกทางเลือกหนึ่งคือการแปลงมันเป็น Python dict แล้วเพิ่มค่า "owner" แต่เมื่อทำเช่นนั้นฉันจะได้รับทุกค่าเป็นรายการ (เช่น {'name': ['MyName']}) ดังนั้นมันจึงเป็นอย่างมาก วิธีแก้ปัญหาที่น่าเกลียด ฉันคิดว่ามันควรจะเป็นวิธีแก้ปัญหาที่ตรงไปตรงมากว่านี้