나는 "를 통해"사용 ManyToMany 관계를 사용하여 내 객체를 개조 : link text장고 복잡한 모델과 템플릿
class Receipt(models.Model):
name = models.CharField(max_length=128)
(...)
components = models.ManyToManyField(Product, through='ReceiptComponent')
class Admin:
pass
def __unicode__(self):
return self.name
def url(self):
return self.id
class ReceiptComponent(models.Model):
product = models.ForeignKey(Product)
receipt = models.ForeignKey(Receipt)
quantity = models.FloatField(max_length=9)
unit = models.ForeignKey(Unit)
class Admin:
pass
def __unicode__(self):
return unicode(self.quantity!=0 and self.quantity or '') + ' ' + unicode(self.unit) + ' ' + self.product.genitive
이 좋아 보인다,하지만 난 그것으로이 문제가 :
1) 관리자 관리 패널에 영수증과 쉽게 연결되어 있지 않음 = 새 구성 요소를 추가해야하는 경우 - 구성 요소로 이동하여 영수증에 연결되는 구성 요소를 만들어야합니다 - 어쩌면 유일한 해결책 일 수 있습니다. 그러나 영수증에 더 직관적입니다.
2) 템플릿을 사용하여 인쇄 할 수 없습니다 :
views.py :
이(...)
def detail(request, receipt_id):
receipt = get_object_or_404(Receipt, pk=receipt_id)
components = receipt.components.all()
return render_to_response('receipt.html',{'receipt' : receipt, 'components' : components,}
(...)
가 receipt.html :
<h1>{{ receipt.name }}</h1>
{% for component in components.all %}
<div class='component'>{{ component }}</div>
{% endfor %}
바로! 구성 요소 = receipt.receiptcomponent_set.all() 는 문제를 해결합니다. Python 및 Django가 나를 놀라게하지 않습니다; D –