【问题标题】:How to display A only a users entered data related in a foreignkey on detailview in django如何在 django 的详细视图上仅显示用户在外键中输入的相关数据
【发布时间】:2020-05-23 22:59:57
【问题描述】:

我正在构建这个简单的测验应用程序。此应用程序允许所有用户以 Docx 格式提交作业的答案。每当用户在 DetailView 页面上查看问题时,如果用户已经为该分配提交了解决方案,那么该解决方案也应该显示在 DetailView 页面上。目前我得到的是所有用户提交的所有答案。我只想要用户在详细信息页面上对该作业的回答 这是我的模型。

class Assignment(models.Model):
    title = models.CharField(max_length=120)
    slug = models.SlugField(max_length=500)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    class_or_level = models.ForeignKey(StudentClass, on_delete=models.CASCADE)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    Text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    date_expire = models.DateTimeField()

    def __str__(self):
        return self.title


class Answer(models.Model):
    slug = models.SlugField(max_length=500)
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)
    student = models.ForeignKey(User, on_delete=models.CASCADE)
    file = models.FileField(upload_to='assignment')
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{} - {} '.format(self.assignment, self.student)

以下是我的看法

class AssignmentSubmitView(DetailView):
    model = Assignment
    template_name = 'assignment_submit.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['student_answer'] = self.object.answer_set.all()
        return context

下面是我在 detailview 模板上的过滤器。

{% for answer in student_answer %}
  {{ answer.file  }}
 {% endfor %}

【问题讨论】:

    标签: django django-models django-forms django-views django-templates


    【解决方案1】:

    您首先需要知道访问该页面的用户,所以我假设您有一个用户模型和一个身份验证系统。

    在视图中

    class AssignmentSubmitView(DetailView):
        model = Assignment
        template_name = 'assignment_submit.html'
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            context['student_answer'] = self.object.answer_set.filter()#then filter and get the answer specific to that user here (depending on your user and Assignment models)
            return context
    

    在你的模板中

    {% if user.is_authenticated %}
        {% if student_answer %}
            {% for answer in student_answer %}
                {{ answer.file  }}
            {% endfor %}
        {% endif %}
    {% endif %}
    

    【讨论】:

    • 如果您向我们展示您的模型,它会更有帮助
    • 请我添加这两个模型。请再看一遍
    猜你喜欢
    • 2020-02-02
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2020-10-30
    • 1970-01-01
    • 2018-09-13
    • 2020-08-13
    相关资源
    最近更新 更多