1

像这样使用 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 接口:

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

4

1 回答 1

6

这与经理无关,甚至根本与 Django 无关。列表推导式总是构造一个列表;这是它的主要目的。但是您在该列表 comp 中唯一要做的就是调用print(),它返回 None。因此,整个表达式的结果是一个包含单个 None 的列表,shell 会帮你打印出来。

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

于 2017-07-02T20:48:16.983 回答