从ForeignKey模型下载链接

时间:2019-08-16 06:53:06

标签: django django-models django-templates django-2.2

我想在博客的每个帖子上创建一个附件。然后,我这样做了:

class FileUpload(models.Model):
    name = models.Charfield(max_length=70)
    file = models.FileField()

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("single_file", kwargs={"pk": self.pk})


class BlogPost(models.Model):
    title = models.Charfield(max_length=70)
    .
    .
    .
    attachment = models.ForeignKey(
        FileUpload, 
        on_delete=models.CASCADE, 
        related_name="related_attachment", 
        null=True,
        blank=True,
        )

在单个帖子的模板中,我已输入以下内容:

  {% if blogpost.attachment %}
  <hr>
  <div>
    <a class="btn btn-info" href="{{ attachment.get_absolute_url }}" rule="button">
        Download
    </a>
  </div>
  {% endif %}

但是我发现href为空,无法下载附件。 if条件可以正常工作,因为如果帖子没有附件,则按钮不会出现。

在我的下载按钮中放置下载链接的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

好,您有错字:

替换attachment.get_absolute_url

使用

blogpost.attachment.get_absolute_url

答案 1 :(得分:0)

好几件事。首先,从if语句看来,您是从视图中传入blogpost,这意味着您需要引用blogpost.attachment

尽管如此,您的网址还是应该像这样被引用:

<a href="{% url '<app_name>:<link_name>' blogpost.attachement.pk %}">Download</a>