Django models 从对象查询返回标点正确的字符串

Django models 从对象查询返回标点正确的字符串,django-models,Django Models,在我的django应用程序中,特别是在管理端,我对我的模型执行了一些def操作: def get_flora(self): return self.flora.all() def targeted_flora(self): return u"%s" % (self.get_flora()) 然而,flora是一个众多的领域,有时也会使用外来的关键领域 我这样做是为了为模型提供一个实用程序“get”函数,然后第二个def是为django admin提供一个更友好的字段名来填充表

在我的django应用程序中,特别是在管理端,我对我的模型执行了一些def操作:

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

def targeted_flora(self):
    return u"%s" % (self.get_flora())
然而,flora是一个众多的领域,有时也会使用外来的关键领域

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

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

[<Species: pittosporum>, <Species: pinus radiata>]
或者,如果有三个

pittosporum, pinus radiata & erharta ercta

非常感谢

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

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]
顺便说一句:

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''

好极了!干得好,谢谢你。。。只需要在“else”之后添加一个“:”,对-我在答案中修复了它…:)
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''