Как получить доступ к объектам базы данных в пользовательском методе сохранения django? - PullRequest
0 голосов
/ 25 сентября 2019

Я должен проверить, предназначен ли метод сохранения модели django для создания нового объекта или его обновления, потому что я должен обновлять статус дочерних объектов из родительского, если он обновлен.

class Categoria(Entidad):

  ESTADO = (("Activo", "Activo"), ("Inactivo", "Inactivo"))
  estado = models.CharField(verbose_name=_("Estado"), max_length=20, choices=ESTADO, default=1)
  categoria_padre = models.ForeignKey('self', verbose_name=_("Categoría Padre"), related_name='parent_category', related_query_name='child_category', null=True, blank=True, on_delete=models.CASCADE)

  def save(self, *args, **kwargs):

    from django.db import connection

    # first option does not work because i can access to django model manager
    old = self.objects.get(id=self.id)

    # second option throughs 500 error when create new objects
    cursor = connection.cursor()
    response = cursor.execute("SELECT * FROM cms_categoria WHERE id = '" + str(self.id) + "'")
    set = response.fetchall()
    connection.commit()
    cursor.close()
    connection.close()

Вторые параметрыработает над локальной разработкой, но не тогда, когда отправляю ее на героку с postgres.

Кто-нибудь может мне помочь, пожалуйста?Спасибо, С уважением.

1 Ответ

0 голосов
/ 25 сентября 2019

Вы должны быть в состоянии значительно упростить свой метод save(), насколько мне известно, не нужно импортировать соединение и использовать курсоры.

Если в методе сохранения вам нужно проверить, является ли экземплярв БД уже существует, вы можете сделать что-то вроде этого:

def save(self, *args, **kwargs):
    if self.pk:
        # update your child objects here if it has been updated
        pass
    return super.save(*args, **kwargs)

Это потому, что если объект создается в БД (т.е. новый экземпляр), ему не будет присвоен первичный ключ до super().save(*args, **kwargs) называется.Если первичный ключ существует, вы знаете, что он обновляется, а не создается.

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