Django - Как обновить поле внутри метода save () модели?

Можно обновить поле модели внутри метода save ()?

models.py:

class BicycleAdItemKind(MPTTModel):

    image_file_temp_fullpath = ""
    image_file_temp_filename = ""

    def url(self, filename):
        #pdb.set_trace()

        #url = "MultimediaData/HelpAdImages/ItemKind/%s/%s" % (self.id, filename)
        url = "MultimediaData/HelpAdImages/ItemKind/Temp/%s" % (filename)
        self.image_file_temp_fullpath = url
        self.image_file_temp_filename = filename
        return url

    def item_kind_image(self):
        return '' % self.image
    item_kind_image.allow_tags = True     

    n_item_kind      = models.CharField(max_length=50) # Bicicleta completa, Componentes para bicicleta, Acessorios para ciclista
    parent           = TreeForeignKey('self', null=True, blank=True, related_name='children')
    description      = models.TextField(null=True, blank=True)
    image            = models.ImageField(upload_to=url, null=True, blank=True)
    date_inserted    = models.DateTimeField(auto_now_add=True)
    date_last_update = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        if not self.id:
            BicycleAdItemKind.tree.insert_node(self, self.parent)
        super(BicycleAdItemKind, self).save(*args, **kwargs)

        pdb.set_trace()
        # I will move the file from "Temp" folder to the folder with the "Id" number
        from django.core.files.move import file_move_safe
        src = settings.MEDIA_ROOT + "/" + self.image_file_temp_fullpath 
        dst = settings.MEDIA_ROOT + "/" + "MultimediaData/HelpAdImages/ItemKind/%s/%s" % (self.id, self.image_file_temp_filename)
        new_directory = settings.MEDIA_ROOT + "/MultimediaData/HelpAdImages/ItemKind/%s" % (self.id)
        if not os.path.exists(new_directory):
            os.makedirs(new_directory)

            if file_move_safe(src, dst):
                # I will update the field image
                BicycleAdItemKind.objects.filter(pk=self.id).update(image=dst)
                # Delete the Temp file

    def __unicode__(self):
        return self.n_item_kind

    class MPTTMeta:
        order_insertion_by = ['n_item_kind']

Строка кода ниже не выполняет никаких действий,

BicycleAdItemKind.objects.filter(pk=self.id).update(image=dst)

Можно сделать обновление внутри метода сохранения?

Дайте мне несколько подсказок.

С наилучшими пожеланиями,

2
nl ja de

2 ответы

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

def save(self, *args, **kwargs):
    if not self.id:
        BicycleAdItemKind.tree.insert_node(self, self.parent)

    pdb.set_trace()
    # I will move the file from "Temp" folder to the folder with the "Id" number
    from django.core.files.move import file_move_safe
    src = settings.MEDIA_ROOT + "/" + self.image_file_temp_fullpath 
    dst = settings.MEDIA_ROOT + "/" + "MultimediaData/HelpAdImages/ItemKind/%s/%s" % (self.id, self.image_file_temp_filename)
    new_directory = settings.MEDIA_ROOT + "/MultimediaData/HelpAdImages/ItemKind/%s" % (self.id)
    if not os.path.exists(new_directory):
        os.makedirs(new_directory)

        if file_move_safe(src, dst):
            # I will update the field image
            BicycleAdItemKind.objects.filter(pk=self.id).update(image=dst)
            # Delete the Temp file

    super(BicycleAdItemKind, self).save(*args, **kwargs)
0
добавлено

Пробовали ли вы проверить, что такое dst при запуске обновления? Почему бы не сделать это так?

self.image=dst
0
добавлено
Я тестировал, с «self.image = dst», но полевое изображение не получает значение «dst». Странная вещь - это не ошибка. Любые подсказки?
добавлено автор André, источник
Что происходит, когда вы проверяете строку в базе данных?
добавлено автор girasquid, источник
Django
Django
1 931 участник(ов)

Полезная информация и правила: https://github.com/django-ru/faq Вакансии и резюме: @django_jobs Пофлудить идём сюда: @django_flood Статистика чата: combot.org/chat/-1001063854692

django_jobs
django_jobs
916 участник(ов)

Поиск и предложения работы (Django) Правила: https://t.me/django_jobs/4 Вакансии с тегом #job улетают в канал @django_jobs_board Вопросы к @amureki Основной чат @pydjango

Django
Django
733 участник(ов)

Веб-фреймворк для перфекционистов с дедлайнами. Наша группа на vk: https://vk.com/django_framework В Discord: https://discord.me/django_framework по всем вопросам @MechanisM

django flood
django flood
71 участник(ов)

Флудилка джангистов Пока без правил