Я иногда добавляю методы модели, например, так:
class Company(models.Model):
name = CharField(length=64)
@classmethod
def dropdown(cls, classes="" id_prefix=""):
"""
Prints out a select box with every company
"""
if id_prefix:
id_prefix = id_prefix + '_'
t = Template("""
<select class="{{ classes }}" id="{{ id_prefix }}company_id">
{% for company in companies %}
<option value="{{ company.id }}">{{ company.name }}</option>
{% endfor %}
</select>
""")
companies = cls.objects.all()
c = {'companies': companies, 'classes': classes, 'id_prefix': id_prefix}
return t.render(c)
Многие мои коллеги говорят мне, что это неправильно, потому что вывод HTML - это то, что всегда нужно делать в представлении, но я думаю, что, поскольку это всего лишь один элемент HTML, все в порядке.