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)