2013-03-15 6 views
3

제품 및 특성에 대해 사용자 지정 중간 테이블을 사용하고 싶습니다. 나는 다음과 같은 모델은 내가 이름을 얻고있다Django ManyToMany 관계 사용자 정의 중간 테이블을 사용하는 QuerySet

{% for attribute in product.attributes.all %}{{ attribute.name }}: {{ attribute.value }} {% endfor %} 

을 말함으로써 뷰에서

class Products(models.Model): 
    name = models.CharField(max_length=600, blank=True) 
    brand = models.CharField(max_length=300, blank=True) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True)  

class Attributes(models.Model): 
    name = models.CharField(max_length=600) 
    product = models.ManyToManyField(Products, through="AttributesMapping", related_name="attributes") 

class AttributesMapping(models.Model): 
    attribute = models.ForeignKey(Attributes) 
    product = models.ForeignKey(Products) 
    value = models.TextField(blank=True) 

문맥과 속성을 얻으려고 노력 템플릿에서 제품 객체를 추가, 정의하지만, 값이 showup하지 않습니다 . SQL 문 실행을 검사 해 보았습니다.

SELECT `attributes`.`id`, `attributes`.`name` FROM `attributes` INNER JOIN `attributes_mapping` ON (`attributes`.`id` = `attributes_mapping`.`attribute_id`) WHERE `attributes_mapping`.`product_id` = 1 

값이 'attributes_mapping'테이블에 있고, Select 문에 참조가 있지만 해당 필드를 선택하지 않았습니다.

미리 도움을 청하십시오.

+0

쿼리 세트를 작성하는 코드를 보여주십시오. 문제가있을 수 있습니다. – jknupp

+0

보기에서 나는이'product = products.objects.get (url = product_url)'과'return render ('template.html', {product : product})' – san

답변

0

valueattribute에 정의되어 있지 않으므로 통과 표에 정의되어 있습니다. 또한

for mapping in AttributesMapping.objects.get(product=product): 
    print mapping.attribute.name, mapping.value 

:이 물론이다

for attribute in product.attributes.all(): 
    mapping = attribute.attributemapping_set.get(product=product) 
    print attribute.name, mapping.value 

당신이 일을하고있는 방식을 변경해야 의미에 액세스하려면 액세스하는 속성 매핑 개체가 필요합니다 이러한 종류의 함수 호출은 장고 템플릿에서 지원되지 않기 때문에. 귀하의 설정에 대해 조금 더 알지 못해서, 나는 최선의 방법을 조언 해 드릴 수는 없습니다.

0

템플릿에 Attribute 개체가 있지만 ({% for attribute in product.attributes.all %}) AttributesMapping 개체 인 것처럼 사용하고 있습니다. Attribute 개체에는 value 특성이 없습니다.

관련 문제