如何根据外键主键上传文件?

时间:2019-06-24 14:44:11

标签: django django-models

基本上,我正在尝试创建一个应用程序,使用户可以在其特定帖子上上传课程资料,例如文档。但是,我不确定如何根据帖子的主键显示上传的文档。截至目前,我的帖子正在显示特定用户正在上传的所有文档。

这是我的“发布”模型

class Post(models.Model):
    title = models.CharField(max_length=100)
    image = models.ImageField(default = 'default0.jpg', upload_to='course_image/')
    description = models.TextField()
    price = models.DecimalField(decimal_places=2, max_digits=6)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = models.IntegerField(default = 0)

    def __str__(self):
        return self.title

这是我的“课程”模型

class Lesson(models.Model):
    title = models.CharField(max_length=100)
    file = models.FileField(upload_to="lesson/pdf")
    date_posted = models.DateTimeField(default=timezone.now)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('lesson_upload', kwargs={'pk': self.pk})

这是我基于班级的列表视图,应该根据帖子显示上载的课程:

class LessonListView(ListView):
model = Lesson
template_name = 'store/uploaded_lesson.html'
context_object_name = 'lesson'

def get_queryset(self):
    self.post = get_object_or_404(post, name=self.kwargs['post'])
    return Lesson.objects.filter(post=self.post)
{% extends "store/base.html" %}
{% block content %}
    <div id="main">
    <table class="table mb-0">
    <thead>
      <tr>          
        <th>Title</th>
        <th>Author</th>
        <th>Download</th>
        <th>Delete</th>
      </tr>
    </thead>
    <tbody>
      {% for lesson in lesson %}
      <tr>
        <td>
            {% if lesson.file %}
                <img src="{{ lesson.file.url }}"  style="width:100px;">
            {% else %}   
            {% endif %}
        </td>
      </tr>
      {% endfor %}
    </tbody>
  </table>
</div>
{% endblock %}

1 个答案:

答案 0 :(得分:1)

您将需要他们上传的材料的另一个模型。像这样:

class UploadedPostMaterial(models.Model):
    content= models.TextField()
    date_uploaded = models.DateTimeField(default=timezone.now)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

此模型将包含上传的数据并将其绑定到帖子。现在,当您在应用中显示所有或特定帖子时,您可以为每个帖子选择相关内容并显示上传的内容。