Tôi đang cố gắng tạo một hệ thống cho phép người dùng tải lên tệp zipfile và sau đó giải nén nó bằng cách sử dụng tín hiệu post_save.tín hiệu django, cách sử dụng "instance"
class Project:
....
file_zip=FileField(upload_to='projects/%Y/%m/%d')
@receiver(post_save, sender=Project)
def unzip_and_process(sender, **kwargs):
#project_zip = FieldFile.open(file_zip, mode='rb')
file_path = sender.instance.file_zip.path
with zipfile.ZipFile(file_path, 'r') as project_zip:
project_zip.extractall(re.search('[^\s]+(?=\.zip)', file_path).group(0))
project_zip.close()
unzip_and_process
phương pháp hoạt động tốt khi đường dẫn tập tin chính xác được cung cấp (trong trường hợp này, tôi cần phải cung cấp instance.file_zip.path
. Tuy nhiên, tôi không thể nhận/đặt trường hợp với các tín hiệu. Django tài liệu về tín hiệu không rõ ràng .? và đã không có ví dụ Vì vậy, tôi phải làm gì
Tôi nghĩ rằng đó là về '** kwargs' mà tôi chưa biết. Ví dụ của bạn hoạt động tốt, cảm ơn bạn. –
@ Ferdinand Không có ví dụ về post_save trong tài liệu django. – Anuj
@Anuj - Tôi chưa bao giờ nói có bất kỳ ví dụ nào về 'post_save'. Có những ví dụ về cách sử dụng tín hiệu nói chung, và chúng cũng áp dụng cho 'post_save', vì không có gì đặc biệt về tín hiệu đặc biệt này. –