我对Django(Python)也很陌生,并通过实践来学习它。在
我在玩Django管理网站。我已经创建了两个模型,并成功注册在管理。对于list_display
中给定的字段,数据显示得很好。
我想要一个管理中的另一个表,它通过一些逻辑处理来显示两个表中的数据。在
为了获得基于前两个模型数据的另一个表,我可以用这个question中提到的方法创建一个新模型。在
现在的问题是,如何从其他模型表中获取数据,以及如何返回,以便它可以显示在管理中的表中。在
这是我的模型.py公司名称:
from django.db import models
class GoodsItem(models.Model):
name = models.CharField(max_length=255)
size = models.DecimalField(max_digits=4, decimal_places=2)
INCHES = 'IN'
NUMBER = 'NUM'
GOODS_ITEM_SIZE_UNITS = (
(INCHES, 'Inches'),
(NUMBER, '#'),
)
size_unit = models.CharField(
max_length=4,
choices=GOODS_ITEM_SIZE_UNITS,
default=INCHES,
)
def __str__(self):
if(self.size_unit == self.NUMBER):
return "%s #%s" % (self.name, (self.size).normalize())
else:
return "%s %s\"" % (self.name, (self.size).normalize())
class FinishedGoodsItem(models.Model):
date = models.DateField()
goods_item = models.ForeignKey(GoodsItem, on_delete=models.CASCADE, related_name="finished_name")
weight = models.DecimalField(max_digits=6, decimal_places=3)
def __str__(self):
return str(self.goods_item)
class SoldGoodsItem(models.Model):
goods_item = models.ForeignKey(GoodsItem, on_delete=models.CASCADE, related_name="sold_name")
date = models.DateField()
weight = models.DecimalField(max_digits=6, decimal_places=3)
def __str__(self):
return self.goods_item
管理中的第三个表应显示如下数据:
^{pr2}$这里GoodsItem是GoodsItem模型的字符串表示,可用库存应计算为:
到最后一次入关(即最后一次入关日期)为止,特定货物的成品货物重量之和(即最后一次入关日期)特定货物的货物重量之和
如果有人告诉我如何在模型中用不同的方法查询和返回数据,我将实现这个逻辑。如果有任何疑问,尽管问。在
我知道您希望每个
GoodsItem
对象一行。您可以直接将“stock available”列添加到GoodsItem
管理员,而无需创建单独的模型,正如danielroseman所说。在示例代码(可能不是100%正确,但您了解要点):
参见Django docs on aggregation。请记住,这将为列表中显示的每个项目执行两个额外的查询。在
编辑:下面建议的解决方案不起作用,原因是Django错误,其中描述了here的聚合和多个表,如注释中所强调的那样。使用使用子查询的this answer。在
如果前一个解决方案由于许多查询而速度太慢,则另一个选择是:
^{pr2}$请注意,最后一个选项只将特性添加到管理员,但这可能就足够了。在
相关问题 更多 >
编程相关推荐