Как загрузить документ в статью, используя id статьи, когда она даже не существует

В настоящее время я нахожусь в очень странной ситуации. Я пытаюсь загрузить документ, используя id статьи и id пользователя в статью. Но проблема в том, что когда я пытаюсь выбрать id статьи из модели документа, она выдает ошибку, что статья не существует.

И на самом деле это правда, потому что как я могу загрузить документ в статью, если она даже не существует. Так как же я могу использовать id статьи в такой ситуации?

Ниже приведена моя модель документа, в которой я передаю идентификатор пользователя и идентификатор статьи для загрузки документа.

documentmodels.py

class DocumentModel(models.Model):
    id=models.AutoField(primary_key=True, auto_created=True, verbose_name="DOCUMENT_ID")
    user_fk_doc=models.ForeignKey(User, on_delete=models.CASCADE,  related_name="users_fk_doc")
    article_fk_doc=models.ForeignKey(Article, on_delete=models.CASCADE, related_name="articles_fk_doc")
    document=models.FileField(max_length=350,  validators=[FileExtensionValidator(extensions)], upload_to=uploaded_files)
    filename=models.CharField(max_length=100, blank=True)
    filesize=models.IntegerField(default=0, blank=True)
    mimetype=models.CharField(max_length=100, blank=True)
    created_at=models.DateField(auto_now_add=True)

ниже представлены модели статей,

class Article(models.Model):
    id=models.AutoField(primary_key=True, auto_created=True, verbose_name="ARTICLE_ID")
    headline=models.CharField(max_length=250)
    abstract=models.TextField(max_length=1500, blank=True)
    content=models.TextField(max_length=10000, blank=True)
    published=models.DateTimeField(auto_now_add=True)
    tags=models.ManyToManyField('Tags', related_name='tags', blank=True)
    isDraft=models.BooleanField(blank=True, default=False)
    isFavourite=models.ManyToManyField(User, related_name="favourite", blank=True)
    created_by=models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name="articles")

Итак, я думаю, что способ, которым я пытался разместить документ для статьи, был сложным. Я добавлял id статьи в документ, когда id статьи еще не был создан.

Итак, решение, которое я нашел, заключается в том, что вместо использования этих двух внешних ключей в модели документа ниже:

    user_fk_doc=models.ForeignKey(User, on_delete=models.CASCADE,  related_name="users_fk_doc")
    article_fk_doc=models.ForeignKey(Article, on_delete=models.CASCADE, related_name="articles_fk_doc")

Я просто добавил поле many to many в модель статьи. таким образом, моя модель стала такой, как показано ниже:

class Article(models.Model):
    id=models.AutoField(primary_key=True, auto_created=True, verbose_name="ARTICLE_ID")
    headline=models.CharField(max_length=250)
    abstract=models.TextField(max_length=1500, blank=True)
    content=models.TextField(max_length=10000, blank=True)
    published=models.DateTimeField(auto_now_add=True)
    tags=models.ManyToManyField('Tags', related_name='tags', blank=True)
    **files=models.ManyToManyField('DocumentModel', related_name='uploads', blank=True)**
    isDraft=models.BooleanField(blank=True, default=False)
    isFavourite=models.ManyToManyField(User, related_name="favourite", blank=True)
    created_by=models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name="articles")

и затем просто загрузить документ через модель документов и затем использовать поле many to many для фильтрации всех документов по пользователю и статье.

В конце просто выполните такой запрос в зависимости от вашей ситуации для фильтрации документов

DocumentModel.objects.get(id=pk,uploads__created_by_id=self.request.user.id)
Вернуться на верх