标题几乎总结了一下:我试图使用assertEqual来测试一个返回生成器对象的函数,但结果是:
AssertionError:生成器对象genexpr>在0x2e70c80>!=(1,2,...)
除了迭代函数并为每个输出运行assertEqual之外,还有一种聪明的方法吗?
文档说:
如果表由模型支持,数据库将处理排序.如果不是这种情况,则使用Python cmp函数,并且在比较不同类型时使用以下机制作为回退:...
但是,这可能在一个表是由模型的支持下,在自定义列?例如
class MyModel(models.Model):
x = models.IntegerField()
y = models.IntegerField()
def z(self):
return x+y
class MyTable(tables.Table):
z = tables.Column()
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)
当我尝试这样的事情时,列显示OK,但是当我点击列标题进行排序时,我收到此错误:
渲染时捕获FieldError:无法将关键字u'z'解析为字段.选择是:......
显然这是因为在数据库表中找不到z.
有没有解决的办法?
我正在显示一个modelformset,我希望表单通过其字段之一的内容进行排序。因此,我想对SomeModel.objects.filter(whatever).order_by('somefield')模板中的(模型)formset 使用等效项。
我怎样才能做到这一点?
请注意,can_order它并不能满足我的要求(它必须是自动的,不是用户指定的)。我也尝试过其他事情,例如dictsort过滤器,但是会产生不可预测的输出(即未按指定字段排序)。
我什至尝试过{% regroup formset by somefield as sorted_formset %},但是结果sorted_formset不能用作(重复)正常的形式集。
我无法在模板的表单中显示字段的值。该值应该可用于模板,但它似乎没有。
这是情况:
模型.py:
class Member(models.Model):
...
name = models.CharField(max_length=10, unique=True)
description = models.CharField(max_length=50, blank=True)
class Pool(models.Model):
...
members = models.ManyToManyField(Member, through='MemberPoolDates')
class MemberPoolDates(models.Model):
member = models.ForeignKey(Member)
pool = models.ForeignKey(Pool)
date = models.DateField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
视图.py:
pool = Pool.objects.get(id=pool_id)
MemberFormSet = modelformset_factory(MemberPoolDates, form=MemberForm)
memberformset = MemberFormSet(queryset=MemberPoolDates.objects.filter(
pool=pool))
Run Code Online (Sandbox Code Playgroud)
模板:
<form action="" method="post">
{% csrf_token %}
<table>
{{ poolform }}
</table>
<h2>Pool entries:</h2>
{{ memberformset.management_form }}
{% for memberform in memberformset %}
{{ memberform.id }}
{{ memberform.member }}
{{ memberform.member.name }}
{{ memberform.member.description }} …Run Code Online (Sandbox Code Playgroud) 在下面的例子中,是否有一个神奇的词我可以代替<ChildClass>那个像超级的相反的作品?
class Parent(object):
def __init__(self):
print <ChildClass>.x
class someChild(Parent):
x = 10
Run Code Online (Sandbox Code Playgroud)
这是一个愚蠢的例子,但它显示了我的意图.顺便说一下,使用someChild不起作用,因为有很多子类.
我能想到的唯一解决方案是在每个子类中都有一个构造函数,它调用Parent的构造函数并引用自身(甚至传递x),但我想避免在每个子元素中都有构造函数.
我使用django-tables2显示数据库表.全部显示正常,但单击列标题不会按该列排序.标题是可点击的,但在它们的html中没有url文本,例如:
<div class="table-container">
<table class="paleblue"><thead><tr><th class="id orderable sortable"><a href="">ID</a>
</th><th class="orderable sortable system"><a href="">System</a></th> ...
Run Code Online (Sandbox Code Playgroud)
我检查了django-tables2模板源代码,它是这样的:
... <a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}"> ...
Run Code Online (Sandbox Code Playgroud)
哪个我不明白.
我只能通过在view.py中设置order_by来进行排序工作:
class ResultsTable(tables.Table):
class Meta:
model = Performance
attrs = {'class': 'paleblue'}
order_by_field = True
def result(request, system):
results = Performance.objects.filter(system__name=system)
table = ResultsTable(results, order_by=('<any column name from Performance>',))
RequestConfig(request).configure(table)
return render_to_response('result.html', {'table': table})
Run Code Online (Sandbox Code Playgroud)
但这显然只适用于一列,我想点击列来选择要排序的列.
从文档中我的理解是,按列排序应该"开箱即用",这是正确的,还是我做错了什么?