Python Django Модель фиксации поведения? - PullRequest
0 голосов
/ 04 мая 2020

Моим классом модели является 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) ```

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...