第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 DRF 請求中間接分配外鍵

在 DRF 請求中間接分配外鍵

白板的微信 2021-11-16 14:37:29
我需要分配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)


查看完整回答
反對 回復(fù) 2021-11-16
?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個贊

您可以使用

serializer.save(company=company)

在視圖集中,您可以在方法中進(jìn)行自定義,perform_create例如

serializer.save(company=self.request.user.company)


查看完整回答
反對 回復(fù) 2021-11-16
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號