2009-09-18 2 views
0

Я новичок в Django, поэтому я только что составил проект, чтобы познакомиться с ним, но у меня есть небольшая проблема с этим кодом, я хочу иметь возможность, как автомобиль obj, если он доступны так я делаю:Внутренние методы Django Модели

>>>cars = Car.objects.all() 
>>>print cars[0].category 
>>>'A' 
>>>cars[0].available(fr, to) 

, что приводит к:

>>>global name 'category' is not defined 

таким образом, кажется, что у меня нет доступа к self.category внутри класса, какие-то идеи?

from django.db import models 

class Car(models.Model): 

    TRANSMISSION_CHOICES = (
     ('M', 'Manual'), 
     ('A', 'Automatic'), 
    ) 

    category = models.CharField("Category",max_length=1,primary_key=True) 
    description = models.CharField("Description",max_length=200) 
    numberOfCars = models.IntegerField("Number of cars") 
    numberOfDoors = models.IntegerField("Number of doors") 
    transmission = models.CharField("Transmission", max_length=1, choices=TRANSMISSION_CHOICES) 
    passengers = models.IntegerField("Number of passengers") 
    image = models.ImageField("Image", upload_to="photos/%Y/%m/%d") 

    def available(self, fr, to): 
     rents = Rent.objects.filter(car=self.category) 
     rents = rents.excludes(start < fr) 
     rents = rents.exclude(end > to) 

     return cont(rents) 

    def __unicode__(self): 
     return "Class " + self.category 

class Rent(models.Model): 
    car = models.ForeignKey(Car) 
    start = models.DateTimeField() 
    end = models.DateTimeField() 
    childrenSeat = models.BooleanField() 
    extraDriver = models.BooleanField() 

    def __unicode__(self): 
     return str(self.car) + " From: " + str(self.start) + " To: " + str(self.end) 
+1

Ваши тестовые сеансы не отформатированы должным образом, поэтому трудно понять, что происходит. Я не вижу в коде какой-либо причины, почему вы получили жалобу на «категорию». Вы уверены, что этот код действительно вызывает эту ошибку? –

+0

Я отформатировал код, взглянув на исходный текст, и я действительно не понимаю, как вы могли бы получить эту ошибку. –

+0

Да, это вызывает эту ошибку. Что не так с форматированием? – 2009-09-18 12:37:24

ответ

0

Хотя я не могу видеть, как ошибка, которую вы получаете, относится к нему, фильтр вы используете не выглядит правильно.

Вы определяете категорию в виде строки в модели автомобиля:

category = models.CharField("Category",max_length=1,primary_key=True) 

И определить машину как ForeignKey в модели аренды:

car = models.ForeignKey(Car) 

А потом попробовать и фильтр Арендная плата:

rents = Rent.objects.filter(car=self.category) 

Но машина должна быть моделью здесь, а не charfield. Возможно, вы хотели сказать автомобиль = «я»?

+0

Спасибо. Я понял, в чем моя проблема, я запускал «python manage.py shell», и я думал, что этого достаточно, чтобы повторно импортировать мой пакет после того, как я внес изменения в него. Я был неправ. Как только я покинул оболочку и снова сделал это, мой код обновился, и ошибка исчезла. Спасибо за подсказку на автомобиле = self, car = self.category было моим ориентированным на db мышлением :) – 2009-09-18 13:43:50

+0

Используя QuerySets, есть и другие способы получения данных, которые вы хотите. Например, поскольку имеется дополнительный ключ, вы можете использовать rents = self.rent_set –

Смежные вопросы