Как я могу передать экземпляр формы другой форме, пока обе сохраняют Django?
Инфо: У меня есть веб-приложение на python Django, где пользователям разрешено создавать статьи. Каждая статья имеет несколько файлов (фото/видео), которые связаны с этой статьей. У меня есть три модели TemporaryUpload(1), TemporaryUploadChunked(2) и StoredUpload(2). Все работает нормально. Сначала данные асинхронно загружаются в TemporaryUpload перед отправкой формы. После нажатия кнопки отправки формы данные сохраняются в таблице StoredUpload. У меня все работает отлично!
Теперь, что я хочу сделать: Когда пользователь нажимает кнопку отправки статья создается и файлы связаны со статьей Какие файлы отправлены пользователем в StoredUpload. как я могу связать эти файлы со статьей, когда пользователь нажимает кнопку отправки?
Что у меня есть на данный момент:
i have
ArticleModel
/ArticleForm
.when the user hit submit button The article created and the files are appended into
StoreUpload
table it's working fine. But the files are not linked it with an article. i want to link these files with artcle.
я получаю ошибку с этой строкой store_upload(upload_id, os.path.join(upload_id, tu.upload_name), post=post)
когда я пытаюсь передать post=post
экземпляр
models.py
class TemporaryUpload(models.Model):
FILE_DATA = "F"
URL = "U"
UPLOAD_TYPE_CHOICES = (
(FILE_DATA, "Uploaded file data"),
(URL, "Remote file URL"),
)
upload_id = models.CharField(
primary_key=True, max_length=22, validators=[MinLengthValidator(22)]
)
file_id = models.CharField(max_length=22, validators=[MinLengthValidator(22)])
file = models.FileField(storage=storage, upload_to=get_upload_path)
upload_name = models.CharField(max_length=512)
uploaded = models.DateTimeField(auto_now_add=True)
upload_type = models.CharField(max_length=1, choices=UPLOAD_TYPE_CHOICES)
uploaded_by = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.CASCADE
)
def get_file_path(self):
return self.file.path
class TemporaryUploadChunked(models.Model):
upload_id = models.CharField(
primary_key=True, max_length=22, validators=[MinLengthValidator(22)]
)
file_id = models.CharField(max_length=22, validators=[MinLengthValidator(22)])
upload_dir = models.CharField(max_length=512, default=upload_id)
last_chunk = models.IntegerField(default=0)
offset = models.BigIntegerField(default=0)
total_size = models.BigIntegerField(default=0)
upload_name = models.CharField(max_length=512, default="")
upload_complete = models.BooleanField(default=False)
last_upload_time = models.DateTimeField(auto_now=True)
uploaded_by = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.CASCADE
)
class Article(models.Model):
title = models.CharField(max_length=200)
class StoredUpload(models.Model):
post = models.ForeignKey(Article, on_delete=models.CASCADE, null=True)
upload_id = models.CharField(
primary_key=True, max_length=22, validators=[MinLengthValidator(22)]
)
file = models.FileField(storage=DrfFilePondStoredStorage(), max_length=2048)
uploaded = models.DateTimeField()
stored = models.DateTimeField(auto_now_add=True)
uploaded_by = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.CASCADE
)
api.py
views.py
class SubmitFormView(View):
form_class = ArticleForm
# Handle POST request
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
post = form.save()
# StoredUpload(post=post) # did't get anything here!
# Get the post request and extract the IDs of the temporary upload(s)
# to be permanently stored.
data = request.POST
filepond_ids = data.getlist("filepond")
stored_uploads = []
for upload_id in filepond_ids:
tu = TemporaryUpload.objects.get(upload_id=upload_id)
store_upload(upload_id, os.path.join(upload_id, tu.upload_name))
stored_uploads.append(upload_id)
# Return the list of uploads that were stored.
return HttpResponse(
json.dumps({"status": "OK", "uploads": stored_uploads}),
content_type="application/json",
)