首页 > 解决方案 > 使用外键加入 Django

问题描述

我正在使用内置的用户模型。现在我想在我的模板first_namelast_name表格User模型和timesheet_is_running模型中显示TimesheetEntry

模型.py

class TimesheetEntry(models.Model):
    timesheet_users = models.ForeignKey(User, on_delete=models.CASCADE,related_name='timesheet_users')
    timesheet_is_running = models.BooleanField(default=False)

    class Meta:
        db_table = "timesheet_entry"

视图.py

class ClockInOutUserListView(LoginRequiredMixin, generic.TemplateView):
    template_name = 'admin/clock/clock.html'

    def get_context_data(self, **kwargs):   
        context = super(ClockInOutUserListView, self).get_context_data(**kwargs)
        company_name = self.request.user.userprofile.user_company
        context['users'] = User.objects.exclude(
            Q(userprofile__user_is_deleted = True) |
            Q(userprofile__user_company__company_is_deleted=True) | 
            Q(userprofile__user_role__acl_role_title='Admin')
            ).filter(
                Q(userprofile__user_company =company_name) 
            )
        #for user in context['users']:
            # job_user = TimesheetEntry.objects.get(timesheet_users=user)
            #print(user.timesheet_entry_set.all())

        return context

为了显示我正在使用get_context_data哪个context['users']正在打印我的用户first_namelast_name. 但我无法显示模型timesheet_is_running中的内容。Jobs所以我在想join

请帮助加入两个模型UserTimesheetEntry以便我可以在我的模板中显示

模板.html

{% for user in users %}
  {{user.first_name}}
  {{user.last_name}}
  {{user.timesheet_is_running}} <!-- How can get this value in template -->
{% endfor %}

标签: djangodjango-modelsdjango-formsdjango-templatesdjango-views

解决方案


如果您的用户只有一个条目,那么您可以直接在模板中添加它(如评论中所述)。为此,您可以这样做:

{% for user in users %}
  {{user.first_name}}
  {{user.last_name}}
  {{user.timesheet_users.last.timesheet_is_running}}
{% endfor %}

或者,如果您有多个时间表条目,那么您也可以在模板中遍历所有这些条目:

{% for user in users %}
  {{user.first_name}}
  {{user.last_name}}
  {% for entry in user.timesheet_is_running.all %}
     {{entry.timesheet_is_running}}
  {% endfor %}
{% endfor %}

推荐阅读