Как я могу передать экземпляр формы другой форме, пока обе сохраняют 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
StoreUploadtable 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",
)