Возврат аккуратно пунктуированной строки из запроса объекта - PullRequest
0 голосов
/ 10 марта 2009

В моем приложении django, особенно на стороне администратора, я делаю несколько определений с моими моделями:

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

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

тогда как флора - это ManyToManyField, однако иногда также используются поля ForeignKey.

Я делаю это, чтобы обеспечить функцию 'get' для модели, а затем второе определение - предоставить администратору django более удобное имя поля для заполнения табличного представления / представления списка.

Возможно, вопрос состоит из двух частей: 1. Является ли это хорошим рабочим процессом / методом для таких вещей, и 2. Результирующий вывод строки в админке выглядит примерно так:

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

Естественно, но как это выглядит:

pittosporum & pinus radiata

или, если их было три;

pittosporum, pinus radiata & erharta ercta

Супер спасибо!

Ответы [ 2 ]

0 голосов
/ 11 марта 2009

Это работает, кстати:

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''
0 голосов
/ 10 марта 2009

Похоже, вы хотите что-то вроде этого:

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