2009-03-10 9 views
0

In meiner django app, vor allem auf der Admin-Seite zurückkehrend, kann ich ein paar def ist mit meinen Modellen:eine schön unterbrochen Zeichenfolge aus einer Objektabfrage

def get_flora(self): 
    return self.flora.all() 

def targeted_flora(self): 
    return u"%s" % (self.get_flora()) 

während Flora ein ManyToManyField ist, manchmal jedoch ForeignKey Felder werden auch benutzt.

Ich mache dies, um eine Dienstprogramm 'Get'-Funktion für das Modell zu liefern, und dann ist das zweite def, django admin mit einem freundlicheren Feldnamen zu versehen, um die tabellarische/Listenansicht zu füllen.

Vielleicht eine zweiteilige Frage hier: 1. Ist das ein guter Workflow/Verfahren für solche Dinge zu tun, und 2. Die resultierende String Ausgabe in Admin sieht ungefähr so ​​aus:

[<Species: pittosporum>, <Species: pinus radiata>] 

Natürlich genug, aber wie man es so aussehen lässt:

pittosporum & pinus radiata 

oder, wenn es drei waren;

pittosporum, pinus radiata & erharta ercta 

Super danke!

Antwort

0

Klingt wie Sie so etwas wie dies wollen:

def targeted_flora(self): 
    names= [f.name for f in self.get_flora()] # or however you get a floras name 
    if len(names) == 1: 
    return names[0] 
    else: 
    return ', '.join(names[:-1]) + ' & ' + names[-1] 
+0

Sweet! Gute Arbeit und danke ... brauchte nur ein ':' nach 'sonst' –

+0

Richtig - ich habe es in der Antwort behoben ... :) – sth

0

Diese btw funktioniert:

def punctuated_object_list(objects, field): 
    if field: 
     field_list = [getattr(f, field) for f in objects] 
    else: 
     field_list = [str(f) for f in objects] 

    if len(field_list) > 0: 
     if len(field_list) == 1: 
      return field_list[0] 
     else: 
      return ', '.join(field_list[:-1]) + ' & ' + field_list[-1] 
    else: 
     return u'' 
Verwandte Themen