Django Сигналы - создание папки при создании модели - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть модель, в которой я хотел бы создать папку при создании модели: Модель:

class Drive(models.Model):
    user = models.ManyToManyField(User)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    path = models.CharField(max_length=150, editable=False,
                            default='C:/Users/User/Desktop/Python/RavNet/media/storage/drives/{}'.format(str(id)))

    def save(self):
        super().save()

Я пытаюсь использовать сигналы, но должен признать, что это моя первая попытка когда я делаю сигнал, не следуя указаниям учебника, и даже после прочтения документации у меня трудное время.

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Drive
import os

@receiver(post_save, sender=Drive)
def create_drive(sender, instance, created, **kwargs):
    if created:
        os.mkdir(Drive.path)

Ничего не происходит, когда я создаю новую модель привода через администратора django. Я проверил свой код в оболочке и использовал путь-заполнитель (C: / Users / Пользователь / Рабочий стол / Python / RavNet / media / storage / drive / test), который, как я знаю, работает в сигнале при попытке отладки и дошел до того, что понял, что у меня две проблемы.

Первая: при вызове Drive.path в оболочке я получаю путь:

'C:/Users/User/Desktop/Python/RavNet/media/storage/drives/<django.db.models.fields.UUIDField>'

Вместо путь с фактическим идентификатором, как я и надеялся. Как мне решить эту проблему?

Во-вторых, мой сигнал не работает. Похоже, что его не называют. Что я делаю не так?

1 Ответ

0 голосов
/ 15 февраля 2020

Вы должны импортировать ваши сигналы в app.py. Пожалуйста, проверьте ваш app.py. Это должно быть так:

from django.apps import AppConfig

class YourAppConfig(AppConfig):
    name = '...'

    def ready(self):
        import your_project.your_app.signals

Также ваш app/__init__.py должен включать этот код:

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