Skip to main content
 首页 » 编程设计

python之具有多表继承的 Django 1.11 上的可能错误或 python 3.5 上的可能错误还是我

2025年05月04日35pander-it

像这样使用 python 3.5.2 和 django 1.11 多表继承:

class Artist(ArtistParent): 
    biography = models.CharField(max_length=255, blank=True, null=True) 
    avatar = models.ImageField(null=True, blank=True, upload_to=settings.IMAGES_FOLDER) 
    owner = models.ForeignKey("accounts.User", related_name="my_artists", 
                              null=True, blank=True, on_delete=deletion.SET_NULL) 
 
 
class SimilarBand(ArtistParent): 
    pass 

每项工作都很好,但使用 ORM 接口(interface):

>>> ArtistParent.objects.all().delete() 
(0, {}) 
>>> SimilarBand.objects.all().delete() 
(0, {}) 
>>> ArtistParent.objects.all().delete() 
(0, {}) 
>>> SimilarBand.objects.all().delete() 
(0, {}) 
>>> SimilarBand.objects.create(name="Similar Band Test") 
<SimilarBand: Similar Band Test> 
>>> SimilarBand.objects.all() 
<QuerySet [<SimilarBand: Similar Band Test>]> 
>>> ArtistParent.objects.all() 
<QuerySet [<ArtistParent: Similar Band Test>]> 
>>> SimilarBand.objects.all().count() 
1 
>>> ArtistParent.objects.all().count() 
1 
>>> len(ArtistParent.objects.all()) 
1 
>>> len(SimilarBand.objects.all()) 
1 
>>> [print(o) for o in ArtistParent.objects.all()] 
Similar Band Test 
[None] 
>>> [print(o) for o in SimilarBand.objects.all()] 
Similar Band Test 
[None] 
>>> [print(o) for o in ArtistParent.objects.filter(similarband__isnull=False)] 
Similar Band Test 
[None] 
>>>  

我的错误是关于迭代查询集带来的第二个 None,这正常吗?或者是管理器上的错误?

但是,如果我使用这样的 for 构造,它会正常工作:

>>> [print(i) for i in list(SimilarBand.objects.all())] 
Similar Band Test 
[None] 
>>> for i in list(SimilarBand.objects.all()): 
...     print(i) 
...  
Similar Band Test 

无论哪种方式,我都在使用 serpy 序列化程序,并在传递查询集时给出错误。

感谢帮助

更新:

按照评论/回答中的指示,是我没有使用列表理解结构(我的错误)

既不需要对 serpy lib 做任何事情,我的错误变成了框架的问题:

[![


] 1 ] 1

请您参考如下方法:

这与管理器无关,甚至与 Django 完全无关。列表理解总是构造一个列表;这是它的主要目的。但是您在该列表 comp 中所做的唯一一件事就是调用 print(),它返回 None。因此,整个表达式的结果是一个包含单个 None 的列表,shell 会帮助您打印它。

真的,你不应该使用列表推导来解决它们的副作用。使用适当的循环。