2017-07-02 2 views
1

mit Python 3.5.2 und django 1.11 Multitable Vererbung wie folgt aus:Möglicher Fehler auf Django 1.11 mit multititable Vererbung oder möglicher Fehler auf Python 3.5 oder bin ich?

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 

Jeder gut funktionieren, aber mit der ORM-Schnittstelle:

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

Mein Fehler ist über diese zweite Keine, die Iterieren über das Abfrage-Set bringt, ist das normal? oder ist ein Fehler im Manager?

Allerdings funktioniert es richtig, wenn ich ein, wie dies für Konstrukt verwenden:

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

So oder so, ich bin ein serpy Serializer verwenden und einen Fehler geben, wenn ich die queryset passieren.

Vielen Dank für die Hilfe

UPDATE:

Wie im Kommentar instruiert/Antwort war ich es, Fehl war die Liste comprenhension Konstrukt (mein Fehler)

Weder hat alles Whit zu tun die serpy lib, dreht sich mein Fehler etwas mit dem Rahmen zu sein:

[[


] 1] 1

Antwort

6

Das hat nichts mit dem Manager zu tun, oder überhaupt mit Django. Ein Listenverständnis konstruiert immer eine Liste; das ist der Hauptzweck. Aber das einzige, was Sie in dieser Liste tun, ist das Aufrufen von print(), das None zurückgibt. Das Ergebnis dieses gesamten Ausdrucks ist also eine Liste mit einer einzigen None, die die Shell hilfreich für Sie druckt.

Wirklich, Sie sollten nicht Listenergänzungen für ihre Nebenwirkungen verwenden. Verwenden Sie eine ordnungsgemäße Schleife.

+0

Es stellt sich heraus, dass der "None" Fehler, den ich bekomme, ist ein http Header Content Negotiation Problem, das das Framework nicht sehr gut behandelt – alacret

Verwandte Themen