亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 Django Rest Framework 和 UI 之間共享表單邏輯

在 Django Rest Framework 和 UI 之間共享表單邏輯

呼喚遠方 2021-06-18 18:53:12
我的 Django 應用程序有一個 entity Campaign。對于我的 UI,我已經實現CampaignForm了具有重要邏輯的邏輯。我還集成了 Django Rest Framework,以允許Campaign通過 API實現類的CRUD 功能。在 Google 和 DRF 的文檔上搜索后,我發現沒有將 Django Forms 集成到 DRF 的官方方法。我一定是誤會了吧?我唯一看到的是 DRF 有自定義驗證器,但我認為它不能將我的表單的所有邏輯移植到 DRF 的驗證器。如何將我的 CampaignForm 的邏輯包含到我的 API 中?參考:class CampaignForm(forms.ModelForm):    class Meta:        model = Campaign        fields = '__all__'        help_texts = {            'dayparting_schedule': schedule_help_text        }    def __init__(self, *args, **kwargs):        self.request = kwargs.pop('request', None)        super().__init__(*args, **kwargs)    def clean(self, *args, **kwargs):        """        - All Active MUST have dayparting schedule defined        - If schedule is set then timezone must also be set        """        cleaned_data = super().clean()        status = cleaned_data.get('status')        dayparting_schedule = cleaned_data.get('dayparting_schedule')        if status == Campaign.ACTIVE:            # if there is no existing dayparting_schedule OR            # if this form does not have dayparting_schedule            if dayparting_schedule is None \                    and self.instance.dayparting_schedule is None:                raise forms.ValidationError(_('dayparting_schedule cannot be empty for Active'))        schedule_present = bool(dayparting_schedule)        timezone_present = bool(cleaned_data.get('dayparting_timezone'))        # XOR: 0^0, 1^1 => 0, otherwise 1        if schedule_present ^ timezone_present:            raise forms.ValidationError(                _('dayparting_schedule and dayparting_timezone must be set together.'))        return cleaned_data    def clean_dayparting_schedule(self, *args, **kwargs):        schedule = self.cleaned_data.get('dayparting_schedule')        if not schedule:            return        self.validate_schedule(schedule)        return schedule    def validate_schedule(self, yaml_s):        dic = yaml.load(yaml_s)
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

簡而言之: Django rest 框架具有serializers模塊,它相當于 Django 的forms.

您應該創建Serializer(或ModelSerializer),它將以與在您的CampaignForm.

看看序列化器 | Django Rest 框架文檔。


查看完整回答
反對 回復 2021-06-22
  • 2 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號