如何在ListView中提供Django query_set之前修改它

Sam*_*Sam 1 python django django-class-based-views

我有一个Django项目,其中包含一个用户可以搜索的Song Objects数据库.

我的models.py看起来像这样:

class Songs(models.Model):

    title = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)
    link = models.CharField(max_length=255, unique=True)
    album = models.CharField(max_length=100)
    duration = models.CharField(max_length=40)  # Duration in num_secs
Run Code Online (Sandbox Code Playgroud)

我的views.py看起来像这样:

class ResultsView(ListView):

    template_name = os.path.join(APPNAME, "results.html")
    model = Songs
    context_object_name = 'results'
    paginate_by = 60
    ordering = ['title']

    def get_context_data(self, **kwargs):

        context = super(ResultsView, self).get_context_data(**kwargs)
        context['query'] = self.request.GET.get('query')
        return context

    def get_queryset(self, **kwargs):

        query = self.request.GET.get('query')
        query_set = Songs.objects.all()
        results = query_set.filter(title__icontains=query)
        return list(results)
Run Code Online (Sandbox Code Playgroud)

我的results.html模板如下所示:

{% if results %}
    <div class="container-fluid">
        <div class="row">
    {% for result in results %}
        <div class="col-md-2 result-col">
            <a data-toggle="tooltip" title="{{ result.title }}" target="_blank" href="/song/{{ result.id }}">
                <div class="result-text">{{ result.title }} </div>
                <div class="result-dur">{{ result.duration }}</div>
            </a>
        </div>

        {% endfor %}
        </div>
    </div>
{% else %}
    <h2>No Results</h2>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

由于数据最初存储在我的数据库中的方式,每首歌曲的持续时间存储为秒数,即存储长度为2分钟的歌曲,持续时间为120.但是,我想将其显示在模板格式为:"hh:mm:ss".

如何修改我的ResultsView类,以便我可以解析query_set中所有对象的持续时间字段,以便它们具有更可读的持续时间?

注意:要100%清除,我知道如何进行实际转换,使用strftime.我不知道的是,如何访问Song.durationResultsView中的字段.

The*_*Kid 5

您可以向模型添加方法或属性:

@property
def converted_time(self):
    return <your converted time>
Run Code Online (Sandbox Code Playgroud)

并在您的模板中 {{ result.converted_time }}