[Django] Shopping Mall (7)
Variation Manager
모델만들기
models.py
class VariationManager(models.Manager):
def colors(self):
return super(VariationManager, self).filter(variation_category='color', is_active=True)
def sizes(self):
return super(VariationManager, self).filter(variation_category='size', is_active=True)
variation_category_choice = (
('color', 'color'),
('size', 'size'),
)
class Variation(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
variation_category = models.CharField(max_length=100, choices=variation_category_choice)
variation_value = models.CharField(max_length=100)
is_active = models.BooleanField(default=True)
created_date = models.DateTimeField(auto_now=True)
# objects = VariationManager()
def __unicode__(self):
return self.product
어드민 등록하기
admin.py
class VariationAdmin(admin.ModelAdmin):
list_display = ('product', 'variation_category', 'variation_value', 'is_active')
list_editable = ('is_active',)
list_filter = ('product', 'variation_category', 'variation_value')
admin.site.register(Product, ProductAdmin)
admin.site.register(Variation, VariationAdmin)
- 상품이 품절 되었을 경우를 위해 is_active 부분을 컨트롤 할 수 있게 수정해줬다.
템플릿 연결시키기
<div class="row">
<div class="item-option-select">
<h6>Choose Color</h6>
<select name="color" class="form-control" required="required">
<option value="" disabled="disabled" selected="selected">Select</option>
{% for i in single_product.variation_set.colors %}
<option value="{{ i.variation_value | lower }}">{{ i.variation_value | capfirst }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="row">
<div class="item-option-select">
<h6>Select Size</h6>
<select name="size" class="form-control" required="required">
<option value="" disabled="disabled" selected="selected">Select</option>
{% for i in single_product.variation_set.sizes %}
<option value="{{ i.variation_value | lower }}">{{ i.variation_value | capfirst }}</option>
{% endfor %}
</select>
</div>
</div>
variation_set
외래키로 등록된 필드는_set
을 사용하면 사용할 수 있다.- ForeignKey 에서 매개변수 related_name 를 등록하면 그 이름으로 호출할 수 있다. 물론
_set_
으로는 부를 수 없다.- 외래키에서 호출 할 수 있도록 color 와 size를 모델에서 등록해주자.
models.py
class VariationManager(models.Manager):
def colors(self):
return super(VariationManager, self).filter(variation_category='color', is_active=True)
def sizes(self):
return super(VariationManager, self).filter(variation_category='size', is_active=True)
- html 템플릿에서 반복문의 인자로 등록해준다.
variation_set.sizes
는 모델에 정의된class VariationManager
에서 정의된sizes
함수를 호출한다.
댓글남기기