我正在尝试为Django应用程序" webshop"创建一个模型,而且我很难理解我的问题源于什么。
我在这里留下了原始代码,因为我所做的更改有点大,但请告诉我,如果看起来很混乱,我会删除之前的代码和文本或以某种方式修改它。跳到"编辑"看看我目前的进展在哪里
我拥有的models.py
是:
来自django.db导入模型
class Product(models.Model):
def __init__(self, title, quantity, description, image_url=""):
title = models.CharField(max_length=255)
self.quantity = quantity
self.title = title
self.description = description
self.image_url = image_url
def sell(self):
self.quantity = self.quantity - 1
我希望能用它做的事情是用以下内容初始化它:
toy1 = Product(title="Bear plush", description="Fluffy bear plush toy", quantity=10)
我可以用
来调用它 print(toy1.quantity)
print(toy1.title)
toy1.sell()
等等很好,但是toy1.save()
会返回错误
AttributeError: 'Product' object has no attribute '_state'
在使用Google搜索问题时,我发现不建议在此处使用 init 这一事实,但https://docs.djangoproject.com/en/1.11/ref/models/instances/#creating-objects中提供的替代方案 两者都使用一个逻辑,其中类函数的第一次调用与初始调用不同。
如果我面临的问题是由于依赖于__init__
,我怎样才能摆脱它,同时仍然可以使用toy1 = Product(title="Bear plush", description="Fluffy bear plush toy", quantity=10)
初始化对象
或者我的问题是完全不同的?
编辑:
所以经过一些挖掘和尝试之后,我的models.py
现在处于这个阶段:
来自django.db导入模型
class Product(models.Model):
title = models.CharField(max_length=255)
description = models.CharField()
quantity = models.IntegerField(default=0)
image_url = models.CharField(default="")
@classmethod
def sell(cls, quantity):
quantity = cls(quantity=quantity)
quantity = quantity - 1
return quantity
之前的命令仍然有效,而且我不再在类功能中使用 init ,所以这是一个开始!我尝试运行toy1.save()
时出现了不同类型的错误:
sqlite3.OperationalError: table webshop_product has no column named title
The above exception was the direct cause of the following exception:
django.db.utils.OperationalError: table webshop_product has no column named title
我试图找到桌子在我的网店中的位置,但是不管桌子应该哪个"标题"都不应该发生错误。在其中
答案 0 :(得分:1)
我认为您尝试创建的模型应该如下所示:
class Product(models.Model):
title = models.CharField(max_length=255)
quantity = models.IntegerField()
description = models.TextField()
image_url = models.CharField(max_length=255, validators=[URLValidator()])
def sell(self):
self.quantity = self.quantity - 1
self.save()
Django负责实例化,所以你不需要__init__
位。