0

我有这个 Django模型

class Log(models.Model):
    idlog = models.CharField(max_length=16L, db_column='idLog') # Field name made lowercase.
    idhandle = models.CharField(max_length=16L, db_column='idHandle') # Field name made lowercase.
    idprevious = models.CharField(max_length=16L, db_column='idPrevious', blank=True) # Field name made lowercase.
    idseverity = models.IntegerField(db_column='idSeverity') # Field name made lowercase.
    iderrorcode = models.IntegerField(null=True, db_column='idErrorCode', blank=True) # Field name made lowercase.
    eventdate = models.DateTimeField(db_column='eventDate') # Field name made lowercase.
    trace = models.CharField(max_length=1024L, blank=True)
    message = models.CharField(max_length=1024L, blank=True)
    method = models.CharField(max_length=32L, blank=True)
    class_field = models.CharField(max_length=32L, db_column='class', blank=True) # Field renamed because it was a Python reserved word.
    backedup = models.IntegerField(null=True, db_column='backedUp', blank=True) # Field name made lowercase.
    id = models.IntegerField(primary_key=True)

    class Meta:
        db_table = 'log'

    def __unicode__(self):  # Python 3: def __str__(self):
        return self.message

idlog 、 idhandle 和 idprevious 是 MySQL DB 表中 Varbinary(16) 的字段。它们中的每一个都拥有全局唯一标识符 (GUID)。

在我看来有这个简单的方法:

def logger_handle(request):

    tableSize = Handle.objects.all().__len__()
    handles = Handle.objects.all().order_by('id')[tableSize - 20:tableSize]

    context = {'handles': handles}
    return render_to_response('ate_logger/logger_handle.html', context, context_instance=RequestContext(request))

在 logger_handle.html模板中,我有这张表:

<table width="100%" class="gridtable">
    <tr>
        <th style="width: 100px">idlog</th>
        <th style="width: 100px">idhandle</th>
        <th style="width: 100px">idprevious</th>
        <th style="width: 180px">eventdate</th>
        <th style="width: 50px">severity</th>
        <th style="width: 50px">errorcode</th>
        <th style="width: 300px">trace</th>
        <th style="width: 300px">message</th>
        <th style="width: 110px">method</th>
    </tr>

    {% for log in logs %}
    <tr>
        <td>{{ log.idlog }}</td>
        <td>{{ log.idhandle }}</td>
        <td>{{ log.idprevious }}</td>
        <td>{{ log.eventdate }}</td>
        <td>{{ log.idseverity }}</td>
        <td>{{ log.iderrorcode }}</td>
        <td>{{ log.trace }}</td>
        <td>{{ log.message }}</td>
        <td>{{ log.method }}</td>
    </tr>
    {% endfor %}
</table>

我的问题(如您在图像中看到的)是在 idlog 、 idhandle 和 idprevious 没有值(除非它是 None 在桌子上)

在此处输入图像描述

在使用 binascii的视图binascii.b2a_hex(value['idhandle'])中,我可以使用命令将其转换为普通字符串,因此我可以看到 guid。

我的问题是如何在模型层设置它,我如何告诉 django 转换它并将其作为字符串传输到视图,以便我可以在模板上轻松地显示它。

4

1 回答 1

1

可能您应该创建自定义字段类来表示 idlog、idhandle 和 idprevious,如下所述:https ://docs.djangoproject.com/en/dev/howto/custom-model-fields/#converting-field-data-for-序列化并将转换代码放入自定义字段类的 value_to_string 方法的主体中。

注意:您应该在查询集上调用 count() 而不是调用 . len () 因为否则您将获取并检查整个数据集以仅计算长度。

此外,如果您要检查对象长度,请使用函数 len(),它会在后台为您调用len ()。

于 2013-10-14T13:16:27.403 回答