save和clean方法在django模型类中如何工作以及如何调用它们?另外,super在这段代码中有什么帮助?

save和clean方法在django模型类中如何工作以及如何调用它们?另外,super在这段代码中有什么帮助?,django,django-models,django-rest-framework,django-views,django-forms,Django,Django Models,Django Rest Framework,Django Views,Django Forms,默认情况下,save不会调用clean,这意味着您需要手动调用它。在您共享的代码中,save是定制的,以确保每次调用save时都调用clean。调用clean之后,它通过super()调用默认的save方法 您可以在此处阅读更多内容: 但是,请注意,与Model.full_clean()类似,在调用模型的save()方法时,不会调用模型的clean()方法 这意味着当我使用POST调用从views.py文件调用save()方法时,模型类的save方法被调用了,对吗?[elif request.m

默认情况下,
save
不会调用
clean
,这意味着您需要手动调用它。在您共享的代码中,
save
是定制的,以确保每次调用
save
时都调用
clean
。调用clean之后,它通过
super()调用默认的
save
方法

您可以在此处阅读更多内容:

但是,请注意,与Model.full_clean()类似,在调用模型的save()方法时,不会调用模型的clean()方法


这意味着当我使用POST调用从views.py文件调用save()方法时,模型类的save方法被调用了,对吗?[elif request.method==“POST”:user_data=JSONParser().parse(request)#引用模型中的数据,将使用JSONParser user_serializer=UserDataSerializer(data=user_data)解析数据#如果user_serializer.is_valid():#要序列化的数据是有效的user_serializer.save()#保存数据]您需要显示序列化程序实现。但是,只要调用模型的save方法(不仅仅是序列化程序save方法),就可以了
from django.db import models
from django.core.exceptions import ValidationError
from rest_framework import serializers
import re
class UserModel(models.Model):
    name = models.CharField(max_length=50, blank=False, default='')
    email = models.CharField(max_length=50, blank=False, default='')
    #phone = models.IntegerField(blank=False, default='')
    phone = models.CharField(max_length=10,blank=True, default='')
    company = models.CharField(max_length=50, blank=True, default='')

    def __str__(self):
        return self.name

    class Meta:
        ordering = ('id',)

    **def save(self, **kwargs):
        self.clean()
        return super(UserModel, self).save(**kwargs)**

    **def clean(self):
        super(UserModel, self).clean()**
        errors = {}
        valphone = self.phone
        valmail = self.email
        regex = '^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9_-]+\.\w{2,3}$'
        if not (valphone.isdigit() and len(valphone) == 10):
            errors['phone'] = (f"{valphone} must`enter code here` be 10 digits and shouldn't contain any string")
        if not (re.search(regex, valmail)):
            errors['email'] = ('Invalid email id format')
        if errors:
            raise serializers.ValidationError(errors)