型号

class MaterialRequest(models.Model):
    owner = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='allotment_sales')
    flow = models.ForeignKey(Flow, on_delete=models.CASCADE, related_name='flow')
    kit = models.ForeignKey(Kit, on_delete=models.CASCADE, related_name='kit')
    quantity = models.IntegerField(default=0)
    is_allocated = models.BooleanField(default=False)

class AllotmentDocket(models.Model):

    transaction_date = models.DateField(default=datetime.now)
    dispatch_date = models.DateField(default=datetime.now)
    sales_order = models.ForeignKey(MaterialRequest, on_delete=models.CASCADE, related_name='allotment_sales')
    parent_company = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='allotment_parent')

    plastic_pallet = models.IntegerField(default=0)
    side_wall = models.IntegerField(default=0)
    top_lid = models.IntegerField(default=0)
    insert = models.IntegerField(default=0)
    separator_sheet = models.IntegerField(default=0)


我希望访问所有材料请求以及具有分配表创建表的请求。
例如,我有5个“物料申请”和3个“分配”待售物,我想要一个表,其中有5行显示了物料请求对象和各个分配对象的所有详细信息

像这样:

owner flow kit quantity platic_pallet side_wall top_lid Insert
 1     1    1     1        1              1        1      1
 2     2    2     2        2              2        2      2
 3     3    3     3        3              3        3      3
 4     4    4     4        -              -        -      -
 5     5    5     5        -              -        -      -


Views.py

def mat_details(request):
    value = request.POST['my-select']
    start = request.POST['from']
    end = request.POST['to']

    client_pk = Client.objects.filter(client_name = value)[0]

    mat_req = MaterialRequest.objects.filter(owner = client_pk.pk, created_on__range =[start, end] )

    return render(request, 'packsapp/employee/matdeatils.html', {'query': mat_req})

最佳答案

您的两个表具有一对多关系,这意味着一个MaterialRequest条目可以具有多个对应的AllotmentDocket条目。

因为您在related_nameForeignKey中添加了MaterialRequest,所以每个MaterialRequest对象将具有一个名为allotment_sales的属性,这是一种检索和处理与当前AllotmentDocket相关的所有MaterialRequest对象的方法。 >。

尝试在Django Shell中执行以下操作:

>>> material_request = MaterialRequest.objects.first()
>>> material_request.allotment_sales.count()
>>> material_request.allotment_sales.all()
>>> material_request.allotment_sales.first()


您可以阅读有关此here的更多信息。

关于您要显示的表,如果每一行都是MaterialRequest记录,应如何计算AllotmentDocket中的列?它们是否聚合,例如platic_pallet是物料申请的分配表的所有platic_pallet值的总和/平均值吗?

如果您考虑使用表格显示,也许您应该让每一行代表一个AllotmentDocket对象,即一对多关系中的“许多”部分。

09-27 06:09