模型.py
class Part(models.Model):
series = models.CharField(max_length=100)
number = models.CharField(max_length=100)
brand = models.CharField(max_length=100)
class Request(models.Model):
part_number = models.ForeignKey(Part, on_delete=models.CASCADE)
brand = models.CharField(max_length=100)
quantity = models.PositiveIntegerField()
date = models.DateField()
class Quota(models.Model):
part_number = models.ForeignKey(Part, on_delete=models.CASCADE)
brand = models.CharField(max_length=100)
quantity = models.PositiveIntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
supplier = models.CharField(max_length=100)
date = models.DateField()
views.py
def requests_and_quotas(request):
requests = Request.objects.all()
quotas = Quota.objects.all()
result = []
for req in requests:
match = False
for quo in quotas:
if (req.part_number.series == quo.part_number.series) and (abs((req.date - quo.date).days) <= 2):
result.append({'request': req, 'quota': quo})
if not match:
result.append({'request': req, 'quota': None})
return render(request, 'requests_and_quotas.html', {'result': result,})
我想连接 django_filters,但遇到了问题 AttributeError: 'list' object has no attribute '_meta'。如何更改代码逻辑以检索 QuerySet 对象?
result_qs = QuerySet(结果) 它没有帮助
您可以在列表中创建对象的 id 列表。然后简单地过滤它们。
instances = [<MyModel: 1>, <MyModel: 2>]
list_of_ids = [inst.id for inst in instances]
queryset = MyModel.objects.filter(id__in=list_of_ids)
您可以通过将 2 个模型附加到一个数组中来合并它们,然后使用 Python
date
itertools基于
chain
对它们进行排序
from itertools import chain
这是
requests_and_quotas
功能
def requests_and_quotas(request):
requests = Request.objects.all()
quotas = Quota.objects.all()
queryset = []
queryset.append(requests)
queryset.append(quotas)
if len(queryset):
queryset = sorted(chain(*queryset), reverse=True, key=lambda queryset: queryset.date)
return render(request, 'requests_and_quotas.html', {'queryset': queryset,})
那么您可以根据模型的独特字段来决定模板中显示的内容
{% for item in queryset %}
{% if item.supplier %}
<!-- here Quota model render -->
{% else %}
<!-- here Request model render -->
{% endif %}
{% endfor %}