我需要分配ForeignKey給對象而無需在Serializer課堂上使用它。這是我的案例的過度簡化版本:我有名為Company,User和的模型Order:class Company(models.Model): ...class User(AbstractBaseUser) company = models.ForeignKey('Company', null=False) ...class Order(models.Model): company = models.ForeignKey('Company', null=False) some_other_field = ... ...這樣可以有多個Companies,每個Company可以有多個users和orders。User允許檢索和創(chuàng)建orders.在ModelViewSet處理Order檢索和創(chuàng)建操作的a 中,我正在針對請求用戶過濾查詢集:.filter(company=self.request.user.company)通過這種方式,我可以將company字段留在Serializer課堂之外Order:class OrderSerializer(serializers.ModelSerializer): class Meta: model = Order fields = ('some_other_field', ...)當(dāng)用戶需要order使用POST請求創(chuàng)建時出現(xiàn)問題:company字段不能為空,但我也不想將此字段添加到序列化程序,因?yàn)閁ser它始終分配給公司,因此我可以在內(nèi)部通過檢查發(fā)送此請求的用戶來添加此字段.到目前為止,我想出了非常殘酷的解決方案來覆蓋整個create方法CreateModelMixin并在序列化程序驗(yàn)證后手動分配字段: def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) Reservation.objects.create( company=self.request.user.company, some_other_field=request.data['some_other_field'] ) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
2 回答

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個贊
把這個加在你身上 CreateAPIView
這可用于覆蓋 serializer.save() 方法并在保存之前添加額外的參數(shù)。
def perform_create(self, serializer):
# Do any operatons, and get all the data you need
serializer.save( param1 = data1,
param2 = data2,
)
在你的情況下:
def perform_create(self, serializer):
company=self.request.user.company
serializer.save(company = company)

臨摹微笑
TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個贊
您可以使用
serializer.save(company=company)
在視圖集中,您可以在方法中進(jìn)行自定義,perform_create
例如
serializer.save(company=self.request.user.company)
添加回答
舉報
0/150
提交
取消