【问题标题】:Filter on many-to-one model过滤多对一模型
【发布时间】:2016-10-25 12:36:16
【问题描述】:

我希望能够为用户分配车辆登记,当用户登录网站时,他们的主页应该有一个他们拥有的车辆登记列表。

但是我无法让模型类过滤外键。

views.py

@login_required   
def home(request):
    # This is the basic user landing Page
    veh_list = Vehicle.objects.filter(UserProfile.user)
    return render(request, 'portal/home.html', {"veh_list": veh_list})

模型.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class UserProfile(models.Model):
    # This line is required. Links UserProfile to a User model instance.
    user = models.OneToOneField(User)

    # The additional attributes we wish to include.
    compName = models.CharField(max_length = 20)
    milkco = models.IntegerField()


    # Override the __unicode__() method to return out something meaningful!
    def __unicode__(self):
        return self.user.username

class Vehicle(models.Model):
    vehid = models.CharField(max_length = 10)
    company = models.ForeignKey(UserProfile, default = 1)

    class Meta:
        db_table = "vehicle"

    def __unicode__(self):
        return self.vehid

home.html

<!DOCTYPE html>
{% extends 'portal/base.html' %}

{% block title %}{{user.first_name }} {{ user.last_name }} Portal{% endblock %}

{% block content %}

    <p>This is the home Page</p>
    {% if user.is_authenticated %}
        <h4>Optiload says... hello {{ user.first_name }} {{ user.last_name }}!</h4>
    {% endif %}

    {% for veh in veh_list %}
        {{ veh}}
    {% endfor %}

    {% if user.is_authenticated %}
        <a href="/logout/">Logout</a><br/>
    {% endif %}
{% endblock %}

有人可以帮我解决我哪里出错了吗?

谢谢

【问题讨论】:

  • 这行得通吗? veh_list = Vehicle.objects.filter(company__user=request.user)
  • @Sagar 是的。这正是我所需要的。
  • 我会把它添加为答案:)

标签: python django filter many-to-one


【解决方案1】:

Django 提供了一种强大而直观的方式来“跟踪”查找中的关系,在幕后自动为您处理 SQL JOIN。要跨越关系,只需跨模型使用相关字段的字段名称,用双下划线分隔,直到找到所需的字段。

所以你的查询应该是这样的

veh_list = Vehicle.objects.filter(company__user=request.user)

Reference

【讨论】:

    【解决方案2】:

    您不能使用未命名的参数进行查询:

    Vehicle.objects.filter(UserProfile.user)

    在这种情况下你想要:

    Vehicle.objects.filter(company=[your user])

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多