Darii hat geschrieben:Du verwendest OneToMany, das Tutorial ManyToOne. Die Fehlermeldung erklärt dir, wie du weiter zu verfahren hast.
Das hilft leider nicht. .any() liefert auch nicht das gewünschte Ergebnis.
Code: Alles auswählen
class Languages(Entity):
using_options(shortnames=True)
name = Field(Unicode(15))
shortcut = Field(Unicode(2), primary_key=True)
mgname = OneToMany('MaterialGroupName')
def __repr__(self):
return '<Languages name:"%s" (%s) >' % (self.name, self.shortcut)
class MaterialGroups(Entity):
using_options(shortnames=True)
shortcut = Field(Unicode(5), primary_key=True)
parent = Field(Unicode(5))
name = OneToMany('MaterialGroupName')
def __repr__(self):
return '<MaterialGroups shortcut:"%s" parent:"%s" name:%s>' % (self.shortcut, self.parent, self.name)
class MaterialGroupName(Entity):
using_options(shortnames=True)
name=Field(Unicode(20))
mg = ManyToOne('MaterialGroups')
language = ManyToOne('Languages')
def __repr__(self):
return '<MaterialGroupName "%s" (%s)>' % (self.name, self.language)
Das sind die drei Klassen, um die es geht. Der Befehl
Code: Alles auswählen
print MaterialGroups.query.filter_by(parent=u"root").all()
liefert diese Ausgabe
Code: Alles auswählen
[
<MaterialGroups shortcut:"uc" parent:"root" name:
[
<MaterialGroupName "Mikrocontroller" (<Languages name:"Deutsch" (de) >)>,
<MaterialGroupName "Microcontroller" (<Languages name:"Englisch" (en) >)>
]
>,
<MaterialGroups shortcut:"semi" parent:"root" name:
[
<MaterialGroupName "Halbleiter" (<Languages name:"Deutsch" (de) >)>,
<MaterialGroupName "Semiconductor" (<Languages name:"Englisch" (en) >)>
]
>,
<MaterialGroups shortcut:"pass" parent:"root" name:
[
<MaterialGroupName "Passive Bauteile" (<Languages name:"Deutsch" (de) >)>,
<MaterialGroupName "Passive Components" (<Languages name:"Englisch" (en) >)>
]
>
]
Ich habe es von Hand formatiert, damit es deutlicher wird. Was ich jetzt möchte sind die DEUTSCHEN Namen aller Warengruppen, die parent="root" haben. Wie man sieht enthält der Materialgruppen-Name eine weitere Liste mit allen vorhandenen Namen.
Code: Alles auswählen
test= MaterialGroups.query.filter_by(parent=u"root").all()
for i in test:
for j in i.name:
print j.language.shortcut
Ich kann mich jetzt durch die Listen "durchhangeln" um an die gewünschte Information zu kommen, aber das ist ja nicht Sinn von SQL. Ich möchte bereits die Abfrage so gestalten, dass ich NUR eine Liste der gewünschten Namen zurückerhalte. Aber hier scheitere ich bisher. Vielleicht kann mir jemand einen Schubs geben, der mich ein Stück weiter bringt