2016-01-21 3 views
0

Я использую Django 1.8.Подключить модели Django с сигналами

Ниже мой signals.py:

from django.db.models.signals import post_save 
from django.dispatch import receiver 
from datetime import datetime 
from models import Watch, LastUpdated 


@receiver(post_save, sender=Watch) 
def my_handler(sender, **kwargs): 
    obj = LastUpdated.objects.all() 
    current_datetime = datetime.now() 
    if obj: 
     obj.last_updated = current_datetime 
    else: 
     obj = LastUpdated(last_updated=current_datetime) 
    obj.save() 

Мой models.py

class LastUpdated(models.Model): 
    last_updated = models.DateTimeField(auto_now=True) 

class Watch(models.Model): 
    brand = models.CharField(max_length=255) 
    model_name = models.CharField(max_length=255) 
    dial_image = models.ImageField(upload_to='watch/') 
    hour_hand = models.ImageField(upload_to='watch/') 
    minute_hand = models.ImageField(upload_to='watch/') 
    second_hand = models.ImageField(upload_to='watch/') 
    product_url = models.URLField() 
    status = models.BooleanField(default=True) 
    created_at = models.DateTimeField(auto_now_add=True) 

Как подключить сигнал с моделью?

В более ранней версии мы использовали файл post_save.connect(my_handler, sender=Watch) в файле models.py, но не больше (согласно документу). Как мы это делаем сейчас? Я не понимаю документацию.

+0

Что не работает? и что вы подразумеваете под «не больше», этот код по-прежнему отлично подходит для django 1.9. – Sayse

+0

Согласен. Этот код по-прежнему работает с текущей версией, но какие дополнения мне нужно добавить, чтобы этот код работал? – PythonEnthusiast

+0

Я не знаю, вы не сказали, в чем проблема – Sayse

ответ

0

Убедитесь, что ваш signals.py импортируется (читай "вызывается") вашего приложения:

YourApp/инициализации .py

import yourapp.signals 

В качестве альтернативы, вы можете использовать метод AppConfig.ready(), как это рекомендуется в docs (section Where should this code live?).

0

Просто, чтобы показать вам правильный пример.

Создать свой AppConfig нечто похожее на это:

# my_app/apps.py 


import logging 

from django.apps import AppConfig 


_logger = logging.getLogger(__name__) 


class AppConfig(AppConfig): 
    name = "my_app" 
    label = "My App" 

    def ready(self): 
     _logger.info("'%s' completed initialisation.", self.label) 
     import my_app.signals 

Помните, чтобы правильно зарегистрировали приложение в настройках импортируя AppConfig

# settings.py 
# ... 
INSTALLED_APPS = (
    # ... 
    'my_app.apps.AppConfig', 
) 

Теперь, если вы запустите LocalServer, вы должны иметь возможность видеть инструкцию инициализации из журналов, когда приложение готово. Если у вас нет настройки LOGGING, вы можете использовать print вместо _logger.info.

my_app/signals.py это файл, который вы указали в своем вопросе.

Смежные вопросы