从对象查询返回一个很好的标点符号字符串

时间:2009-03-10 05:51:56

标签: django-models

在我的django应用程序中,特别是在管理员方面,我对我的模型进行了一些修改:

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

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

虽然flora是ManyToManyField,但是,有时也会使用ForeignKey字段。

我这样做是为模型提供实用程序'get'函数,然后第二个def是为django admin提供一个更友好的字段名称来填充表格/列表视图。

这里可能包含两个问题: 1.这是做这些事情的好工作流程/方法吗? 2. admin中的结果字符串输出类似于:

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

当然,但如何让它看起来像:

pittosporum & pinus radiata

或者,如果有三个;

pittosporum, pinus radiata & erharta ercta

非常感谢!

2 个答案:

答案 0 :(得分:0)

听起来你想要这样的东西:

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]

答案 1 :(得分:0)

这适用于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''