我的 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
.
添加回答
舉報
0/150
提交
取消