【问题标题】:Django Models internal methodsDjango 模型内部方法
【发布时间】:2009-09-18 12:20:58
【问题描述】:

我是 Django 的新手,所以我只是编了一个项目来了解它,但我对这段代码有一点问题,如果它可用,我希望能够作为汽车 obj,所以我这样做了一个:

>>>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)

【问题讨论】:

  • 您的示例会话格式不正确,因此很难看到发生了什么。我在代码中看不出有任何理由说明您为什么会收到有关“类别”的投诉。你确定这段代码真的会产生这个错误吗?
  • 我已经通过查看原始文本格式化了代码,但我真的不明白你是如何得到这个错误的。
  • 是的,它会产生该错误。格式有什么问题?
  • 请给出完整的回溯。
  • 文件“/mysite/bookings/models.py”,第 19 行,可用租金 = Rent.objects.filter(car=self.category) NameError: global name 'category' is not defined我这样做时得到的确切错误:>>> from mysite.bookings.models import Car, Rent >>> cars = Car.objects.all() >>> cars[0].available(start, end)跨度>

标签: python django django-models


【解决方案1】:

虽然我看不出您遇到的错误与它有什么关系,但您使用的过滤器看起来不正确。

您将类别定义为 Car 模型中的字符串:

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

并将 car 定义为 Rent 模型中的外键:

car = models.ForeignKey(Car)

然后您尝试过滤租金:

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

但是这里的汽车应该是模型,而不是charfield。也许您的意思是 car=self?

【讨论】:

  • 谢谢。我意识到我的问题是什么,我正在运行“python manage.py shell”,我认为在对它进行更改后重新导入我的包就足够了。我大错特错了。一旦我退出 shell 并再次执行此操作,我的代码就会更新并且错误消失了。感谢关于 car=self 的提示,car=self.category 是我面向 db 的想法 :)
  • 使用查询集还有其他方法可以获取您想要的数据。例如,既然有外键,可以使用rents = self.rent_set
猜你喜欢
  • 2013-04-14
  • 2016-09-14
  • 2021-01-05
  • 1970-01-01
  • 2013-04-26
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
相关资源
最近更新 更多