나는 django.db.models
Sum
와 django_tables2의 사용 사례가 있지만, 나는 그 수 있는지 궁금 집계와 장고 문서를 읽은 후 사용을 알아낼 수 없습니다 :장고-표 2와 장고 주석을 문제
# models.py
class AModel(models.Model):
a_id = models.IntegerField()
a_name = models.CharField(max_length=50)
def __unicode__(self):
return unicode(self.name)
class BModel(models.Model):
b_id = models.IntegerField()
b_name = models.CharField(max_length=50)
a_name = models.ForeignKey(AModel)
def __unicode__(self):
return self.b_name
class CModel(models.Model):
c_id = models.IntegerField()
c_name = models.CharField(max_length=50)
c_status = models.CharField(max_length=8)
def __unicode__(self):
return self.c_name
class DModel(models.Model):
d_id = models.IntegerField()
dmode = models.CharField(max_length=50)
bmodel = models.ForeignKey(BModel)
cmodel = models.ForeignKey(CModel)
date = models.DateField(null=True)
cost = models.FloatField(default=0.00)
def __unicode__(self):
return self.d_name
# tables.py
import django_tables2 as tables
class DmodelTable(tables.Table)
class Meta:
model = DModel
fields = ('dmodel', 'bmodel', 'cmodel', 'cost')
class TargetTable(tables.Table)
a_name = tables.Column(accessor='b_name.a_name')
class Meta:
model = DModel
fields = ('bmodel', 'cmodel', 'amodel', 'cost_sum')
# view.py
from django.db.models import Sum
...
def page(request):
queryset = DModel.objects.values('bmodel','cmodel').annotate(cost_sum=Sum('cost'))
table = TargetTable(queryset)
return render(request, 'tartget.html', {'table':table})
def dmodelpage(request):
table = DModelTable(DModel.objects.all())
return render(request, 'tartget.html', {'table':table})
-
:
b_name
및c_name
은 예상되는 이름이 아닌 ID입니다.a_name
은 null입니다. 첫 번째 문제는 bmodel이 queryset에서 bmodel을 올바르게 반환하지 않았기 때문에bmodel.a_name
이 작동하지 않기 때문입니다.
+---------+------------+----------+--------------------+
| b_name | c_name | a_name | cost_sum |
+---------+------------+----------+--------------------+
| 1863703 | 8485748 | - | 3150 |
| 1863703 | 8688288 | - | 0 |
| 1863703 | 8691184 | - | 712.5 |
은 내가 솔루션이 문제가 발생 : 내가 가진 결과는 TargetTable입니다 다음과 같습니다
내가 here 언급 같은 DModel에 하나의 외래 키의 표시 "ID"문제에 대한 솔루션을 찾을 수 있지만, mutlti 외국 키 케이스를 처리하는 방법을 모르고을 가질 수 없습니다.
누군가 도움을 줄 수 있습니까? 당신은 self.x_name
를 반환하여 모델에 __str__
/__unicode__
방법을 정의 할 필요가 있습니다
안녕하세요, Jieter, 답장을 보내 주셔서 감사합니다. 1. 코드에서 __unicode__을 (를) 가지고 있고, 내 질문에 업데이트하십시오.이 코드는 작동하지 않습니다. 2. 원래의 질문에 "bmodel"이라고 쓰고 있다고 생각했는데 실제로는 Dmodel의 "b_name"값입니다. 혼란스럽게해서 죄송합니다. 그러나 그것은 작동하지 않습니다. – zhihong
파이썬 2 또는 3을 사용합니까? 2를 사용한다면,'__unicode__'가 아닌'__str__'을 추가해야합니다. [django docs (https://docs.djangoproject.com/en/1.10/topics/python3/#str-and-unicode-methods도 참조하십시오.). django 관리자는 올바른 방법을 정의하지 않았다면 이름도 표시하지 않습니다. – Jieter
안녕하세요, Jieter, 저는 Python 2를 사용하고 __ unicode __를 사용합니다. 모든 관리자는 이름을 올바르게 표시하고 다른 테이블은 DModelTable과 같은 이름을 올바르게 표시합니다. 여기의 문제는 TargetTable의 집계 계산과 관련이 있다고 생각합니다. – zhihong