Devolver uma cadeia bem pontuada de uma consulta objeto

votos
0

Na minha aplicação Django, especialmente no lado do admin, eu faço alguns def do com meus modelos:

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

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

enquanto flora é um ManyToManyField, no entanto, às vezes ForeignKey campos são usados ​​também.

Eu faço isso para fornecer uma função de utilidade 'get' para o modelo, e depois a segunda def é fornecer django administrador com aa nome de campo mais amigável para preencher a vista tabular / list.

Talvez uma questão em duas partes aqui: 1. É este um bom fluxo de trabalho / método para fazer tais coisas, e 2. A saída da cadeia resultante em administração é algo como:

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

Naturalmente o suficiente, mas como fazê-lo parecer:

pittosporum & pinus radiata

ou, se houver três;

pittosporum, pinus radiata & erharta ercta

Super obrigado!

Publicado 10/03/2009 em 06:51
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Isso funciona btw:

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''
Respondeu 11/03/2009 em 04:37
fonte usuário

votos
0

Parece que você quer algo como isto:

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]
Respondeu 10/03/2009 em 07:09
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more