Django模型内部方法

0 投票
1 回答
588 浏览
提问于 2025-04-15 14:24

我刚接触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

虽然我看不出你遇到的错误和这个有什么关系,但你使用的过滤器看起来不太对。

在汽车模型中,你把类别定义成了一个字符串:

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

而在租赁模型中,你把汽车定义成了一个外键:

car = models.ForeignKey(Car)

然后你尝试过滤租赁记录:

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

但是这里的汽车应该是一个模型,而不是一个字符字段。也许你是想写 car=self?

撰写回答