2017-12-23 24 views
0

Django에서 첫 번째 앱을 만들고 있는데로드에 첨부 한 회사를 기반으로 '로드'를 쿼리하려고합니다. 여기에 문제의 모델이 있습니다.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}) 

사용자를 기반으로 쿼리를 실행할 수 있었으므로이 쿼리가 동일 할 것입니다. 그렇지 않다. 나는 회사를 잘못 참조하고 있다고 생각하고 어쩌면 원래 UserCompany 클래스로 2 단계 더 필터링해야 할 수도 있습니다. 그 방법은 확실하지 않습니다. 내가지고있어

오류 :

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

답변

2

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

+1

와우, 당신에게 완벽하게 작동되도록 많은 감사 읽을 수있는 현재 요청에 대한 정보를 보유하고 있습니다. 그래서 실제 문제는 제가 회사 내에서 회사를 제대로 정의하지 못했다는 것입니다. 그 이유는 내가 회사가 아닌 사용자와 협력 할 수 있었던 이유이기도합니다. –

+0

@KrisTryber 맞아. 다행스럽게 도울 수있어! – Mathyou