我有3个模型,其中一个模型是Abstract超类,其中两个是该超类的子类。
我正在尝试在模型上实现简单的 str 方法,但是无论实现如何,都会引发此错误:
TypeError: __str__ returned non-string (type NoneType)
这是我的模特:
class DemandBase(models.Model):
demand = models.FloatField(blank=True, null=True)
building = models.ForeignKey(Building, on_delete=models.CASCADE)
class Meta:
abstract = True
class DemandHeat(DemandBase):
def __str__(self):
return str(self.id)
class DemandCool(DemandBase):
def __str__(self):
return str(self.id)
好,所以我尝试像上面的示例中那样进行转换,但是我也尝试了以下操作但未成功:
return "This is an example {}".format(self.demand)
还有这个
return f"This is an example {self.demand}"
还有:
return "this is a string"
所有这些替代方法都可以在普通模型上使用,但是在这里却不可行,因此我认为它与类的继承或抽象有关。.
非常感谢任何帮助或提示。预先感谢!
编辑:当我尝试在管理员中创建新的BuildingGroup时,也会出现此错误。它还具有作为m2m关系的建筑物的ForeignKey。该模型如下所示:
class BuildingGroup(models.Model):
description = models.CharField(max_length=500, null=True, blank=True)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
buildings = models.ManyToManyField(Building, default=None, blank=True)
def __str__(self):
return self.description
答案 0 :(得分:1)
我无法重现您的错误。
迁移运行正常,如下所示:
example/migrations/0001_initial.py
- Create model DemandCool
- Create model DemandHeat
我正在使用Django == 2.2.3
编写相同的模型,但不包括ForeignKey(应该没有任何区别)
example / models.py
1 from django.db import models
2
3
4 class DemandBase(models.Model):
5 demand = models.FloatField(blank=True, null=True)
6
7 class Meta:
8 ┆ abstract = True
9
10
11 class DemandHeat(DemandBase):
12
13 def __str__(self):
14 ┆ return str(self.id)
15
16
17 class DemandCool(DemandBase):
18
19 def __str__(self):
20 ┆ return str(self.id)
21
python manage.py shell
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from example.models import DemandHeat
>>> instance = DemandHeat(demand=0.7)
>>> instance.save()
>>> instance.__str__()
'1'
>>> print(instance)
1