Как я могу передать экземпляр формы другой форме, пока обе сохраняют Django?

Инфо: У меня есть веб-приложение на python Django, где пользователям разрешено создавать статьи. Каждая статья имеет несколько файлов (фото/видео), которые связаны с этой статьей. У меня есть три модели TemporaryUpload(1), TemporaryUploadChunked(2) и StoredUpload(2). Все работает нормально. Сначала данные асинхронно загружаются в TemporaryUpload перед отправкой формы. После нажатия кнопки отправки формы данные сохраняются в таблице StoredUpload. У меня все работает отлично!

Теперь, что я хочу сделать: Когда пользователь нажимает кнопку отправки статья создается и файлы связаны со статьей Какие файлы отправлены пользователем в StoredUpload. как я могу связать эти файлы со статьей, когда пользователь нажимает кнопку отправки?

Что у меня есть на данный момент:

  1. i have ArticleModel/ArticleForm.

  2. 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",
        )
Вернуться на верх