Моим классом модели является Document, как показано ниже.
Я хочу обновить все статусы на «Заменено» для каждого нового поля или поля «DocumentNo» на основе записей в базе данных. Мне удалось достичь этой цели. Но, пожалуйста, объясните мне, если произошла ошибка при сохранении будет зафиксировать в базе данных или нет? будет ли этот метод сохранения вести себя как транзакция базы данных?
class Document(models.Model):
DocumentNo = models.CharField(max_length=100)
Rev = models.CharField(max_length=10)
Description = models.TextField(max_length=500)
Area = models.CharField(max_length=100,blank=True,null=True)
ReceivedDate = models.DateField()
Status = models.CharField(max_length=20,choices=[('Current','Current'),('Superseded','Superseded')],default='Current')
class Meta:
constraints=[
models.UniqueConstraint(fields=['DocumentNo', 'Rev'], name='unique_document'),
]
indexes=[
models.Index(fields=['Area','Status'])
]
ordering=[
'DocumentNo',
'Rev'
]
def __str__(self):
return self.DocumentNo + ' (' + self.Rev +')-Status: ' + self.Status
def save(self, *args, **kwargs):
existing_documents=Document.objects.all().filter(DocumentNo=self.DocumentNo)
for doc in existing_documents:
doc.Status='Superseded'
doc.saveIndividual()
super().save(*args, **kwargs)
def saveIndividual(self, *args, **kwargs):
super().save(*args, **kwargs) ```