注意:
本实验是接着 《Django 自定义逻辑添加(通过自定义 save 对象实现)(一次性完成多对多表数据的插入)》而继续的
正文:
将 mysite/user/models.py 中的以下内容:
class Clazz(models.Model):
cname = models.CharField(max_length=30)
class Student(models.Model):
sname = models.CharField(max_length=30)
score = models.PositiveBigIntegerField()
cls = models.ForeignKey(Clazz,on_delete=models.CASCADE)
def __str__(self):
return u'Student:%s,%s'%(self.sname,self.score)
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
try:
self.cls = Clazz.objects.get(cname=self.cls.cname)
except Clazz.DoesNotExist:
self.cls = Clazz.objects.create(cname=self.cls.cname)
#Insertion of student table
models.Model.save(self, force_insert=False, force_update=False,using=None, update_fields=None)
修改为:
class Clazz(models.Model):
cname = models.CharField(max_length=30)
class Student(models.Model):
sname = models.CharField(max_length=30)
score = models.PositiveBigIntegerField()
cls = models.ForeignKey(Clazz,on_delete=models.CASCADE)
def __str__(self):
return u'Student:%s,%s'%(self.sname,self.score)
from django.db.transaction import atomic
@atomic
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
try:
self.cls = Clazz.objects.get(cname=self.cls.cname)
except Clazz.DoesNotExist:
self.cls = Clazz.objects.create(cname=self.cls.cname)
#Insertion of student table
models.Model.save(self, force_insert=False, force_update=False,using=None, update_fields=None)