Как загрузить документ в статью, используя 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)