【问题标题】:Having problems with a query in Django在 Django 中遇到查询问题
【发布时间】:2017-12-23 17:14:17
【问题描述】:

我正在 Django 中构建我的第一个应用程序,我正在尝试根据我附加到负载的公司查询“负载”。这是有问题的模型。

class Load(models.Model):
    company = models.ForeignKey(UserCompany, null=True, 
    on_delete=models.CASCADE)
    load_number = models.IntegerField()
    carrier = models.CharField(max_length=255)
    pickup_date = models.DateField()
    delivery_date = models.DateField()
    shipper = models.CharField(max_length=255)
    consignee = models.CharField(max_length=255)
    po_number = models.CharField(max_length=255)
    pu_number = models.CharField(max_length=255)
    pieces = models.IntegerField()
    description = models.TextField()
    date_created = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.date_created = timezone.now()
        self.save()

    def __str__(self):
        return str(self.load_number)

现在我试图在页面上显示一个列表,但只显示附加到特定公司的负载。用户也需要附属于该公司,所以这是我的用户模型。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

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

# Create your models here.

class UserCompany(models.Model):
    company_name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.company_name

    def __str__(self):
        return self.company_name

# User Model
class UserProfileInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    # Additional Classes
    profile_pic = models.ImageField(upload_to='profile_pics', 
    blank=True)
    company = models.ForeignKey(UserCompany, 
    null=True,on_delete=models.CASCADE)

    def __str__(self):
        return self.user.username

然后我尝试在此视图中查询“负载”。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render, get_object_or_404
from django.shortcuts import redirect
import datetime
from django.conf import settings
from django.utils import timezone
from django.http import HttpResponse
from django.views.generic import View, DetailView
from easy_pdf.views import PDFTemplateResponseMixin
from loads.models import Load
from .forms import LoadForm
from users.models import UserCompany, UserProfileInfo

# Create your views here.

class PDFUserDetailView(PDFTemplateResponseMixin, DetailView):
    model = Load
    template_name = 'loads/load_pdf.html'

def load_list(request):
    loads = 
Load.objects.filter(company=request.company).order_by('date_created')
    return render(request, 'loads/load_list.html', {'loads':loads})

我能够让查询基于用户工作,所以我的想法是这个查询是一样的。不是这种情况。我有一种感觉,我引用了公司错误,也许我需要再过滤 2 个级别,一直到原始的 UserCompany 类,只是不知道如何实现。

我得到的错误是:

AttributeError: 'WSGIRequest' object has no attribute 'company'

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    request.company 不是你能做的。而不是

    Load.objects.filter(company=request.company).order_by('date_created')
    

    你试试这样的:

    current_user = request.user
    company = current_user.userprofileinfo.company
    Load.objects.filter(company=company).order_by('date_created')
    

    request 仅包含有关当前请求的信息,您可以阅读有关here 的更多信息

    【讨论】:

    • 哇,非常感谢您的完美运行。所以实际的问题是我没有在视图中正确定义公司。这也解释了为什么我能够让它与用户而不是公司合作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2016-05-08
    • 1970-01-01
    • 2017-01-20
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多