Trong models.py tôi:Django - Thi một nhiệm vụ thông qua cần tây từ một mô hình
from django.db import models
from core import tasks
class Image(models.Model):
image = models.ImageField(upload_to='images/orig')
thumbnail = models.ImageField(upload_to='images/thumbnails', editable=False)
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
tasks.create_thumbnail.delay(self.id)
Trong tasks.py tôi:
from celery.decorators import task
from core.models import Image
@task()
def create_thumbnail(image_id):
ImageObj = Image.objects.get(id=image_id)
# other stuff here
này được trả lại như sau:
-
Loại
- Ngoại lệ: ImportError
- ngoại lệ giá trị gia tăng: không thể import nhiệm vụ tên
Các lỗi biến mất nếu tôi nhận xét ra from core.models import Image
trong tasks.py
, tuy nhiên điều này rõ ràng sẽ gây ra một vấn đề vì Image
không có ý nghĩa ở đây. Tôi đã cố gắng để nhập khẩu nó bên create_thumbnail
tuy nhiên nó vẫn sẽ không nhận ra Image
.
Tôi đã đọc ở đâu đó rằng thường là đối tượng chính nó có thể được thông qua như là một cuộc tranh cãi với một nhiệm vụ và điều đó sẽ giải quyết vấn đề của tôi. Tuy nhiên, một người bạn đã từng nói với tôi rằng nó được coi là thực hành tốt nhất để gửi ít dữ liệu càng tốt trong một tin nhắn RabbitMQ, vì vậy để đạt được điều đó tôi đang cố gắng để vượt qua chỉ ID hình ảnh và sau đó lấy nó một lần nữa trong nhiệm vụ.
1) phải là những gì tôi đang cố gắng để làm được coi là một thực hành tốt nhất? Nếu có, làm thế nào để tôi làm việc nó ra?
2) Tôi đã nhận thấy trong tất cả các ví dụ tôi tìm thấy khắp nơi trên web, họ thực hiện nhiệm vụ từ một cái nhìn và không bao giờ từ một mô hình. Tôi đang cố gắng tạo một hình thu nhỏ bất cứ khi nào một hình ảnh mới được tải lên, tôi không muốn gọi create_thumbnail trong mọi hình thức/chế độ xem mà tôi có. Bất kỳ ý tưởng về điều đó? Đang thực hiện tác vụ từ một mô hình không được khuyến nghị hoặc thực hành phổ biến?
Tôi thực sự đánh giá cao đoạn" Để loại bỏ nhập khẩu vòng tròn, bạn nên suy nghĩ về cách nhập khẩu sẽ xảy ra ... ". Cảm ơn bạn. – pawelmech