我有一个FormView
,它将数据发送到ListView
。
在LisView
中,我用self.request.GET
获得了数据,并取消了qustom过滤器的使用,从而获得了所需的查询集。
现在,我需要修改查询集中的一些值,但找不到方法。
尝试使用ListView
或queriset['name']
来索引queryset[1]
中的查询队列,但是它告诉我索引没有被支持。
尝试应用queryset.values_list()
和queriset.values()
然后进行索引,但结果相同。
试图在ListView
中创建一个函数并应用到模板中,提示“无法解析提醒”。
最后尝试通过执行object.value-request.GET.value将模板中的值保留下来,但出现此错误:
Could not parse the remainder: ' - request.GET.salary' from 'item.smg70 - request.GET.salary'
views.py
class QuoteListView(ListView):
model = SmgQuotesTable
def get_queryset(self):
r_get = self.request.GET
d_get = {'name': None , 'email':None , 'couple': None, 'age': None, 'kids':None , 'salary':None}
for value in d_get:
d_get[value] = r_get[value]
query_filter = Quotes().planSelector(d_get['couple'], d_get['kids'], d_get['age'])
queryset = super(QuoteListView, self).get_queryset().filter(composite=query_filter)
for i in queryset[1:]:
i - d_get['salary']
print(i)
return queryset
def salary(self, x):
salary_get = self.request.GET('salary')
return x - salary_get
smgquotestable_list.html
{% for item in object_list %}
<div class="table-responsive text-nowrap"></div>
<table class="table table-striped">
<thead>
<tr>
<th scope="col"></th>
<th scope="col">SMG01</th>
<th scope="col">SMG02</th>
<th scope="col">SMG10</th>
<th scope="col">SMG20</th>
<th scope="col">SMG30</th>
<th scope="col">SMG40</th>
<th scope="col">SMG50</th>
<th scope="col">SMG60</th>
<th scope="col">SMG70</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">{{ item.composite }}</th>
<td>$ {{ item.smg01 }}</td>
<td>$ {{ item.smg02 }}</td>
<td>$ {{ item.smg10 }}</td>
<td>$ {{ item.smg20 }}</td>
<td>$ {{ item.smg30 }}</td>
<td>$ {{ item.smg40 }}</td>
<td>$ {{ item.smg50 }}</td>
<td>$ {{ item.smg60 }}</td>
<td>$ {{ item.smg70 }}</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
我需要将表单发送的薪水值保留为在查询集中获得的smg01等值。
答案 0 :(得分:0)
您还可以在queryset上使用update或按照dirkgroten所述进行迭代
答案 1 :(得分:0)
您不会共享一些东西,例如SmgQuotesTable的模型字段或Quote和planSelector的代码。但是,假设您尝试使用在self.request对象中获得的值(例如,名称,电子邮件,一对等的值)过滤结果,并假定这些实际上是SmgQuotesTable的字段,则应按照常规方式进行操作(请参见the docs)。另外,请注意,您无需在get_queryset中调用Super。您可能会将它与get_context_data混淆
您需要调用super来获取上下文。
class QuoteListView(ListView):
model = SmgQuotesTable
def get_queryset(self):
r_get = self.request.GET
d_get = {'name': None , 'email':None , 'couple': None, 'age': None, 'kids':None , 'salary':None}
for value in d_get:
d_get[value] = r_get[value] # I do NOT know what you are doing here, so I am going by your code
filtered_quotes = SmgQuotesTable.objects.filter(**d_get)
return filtered_quotes
答案 2 :(得分:0)
我的错误不是因为dirkgroten告诉我,我是对象的一个实例。 所以我需要做i.value来使用acces的值。
这是我的解决方法:
在quotes.py
中,我编写了一个名为salaryDiscount
的函数,该函数可修改运行时的值:
def salaryDiscount(self, queryset, salary):
'''
This function apply the salary discount to all the values for this person.
'''
salary = float(salary) * 0.03 # Take the salary, and aply the part that could be discounted
for i in queryset: # Get the object of the queryset
i.smg01 = round(i.smg01 - salary, 2) # Use the object edit the values on the fly
i.smg02 = round(i.smg02 - salary, 2)
i.smg10 = round(i.smg10 - salary, 2)
i.smg20 = round(i.smg20 - salary, 2)
i.smg30 = round(i.smg30 - salary, 2)
i.smg40 = round(i.smg40 - salary, 2)
i.smg50 = round(i.smg50 - salary, 2)
i.smg60 = round(i.smg60 - salary, 2)
i.smg70 = round(i.smg70 - salary, 2)
return queryset # Return the queryset edited.
然后在get_queryset
的{{1}}上调用它,在其中修改查询集:
ListView