I have three models, item, variation and item_variations. The item has a foreignkey relation with variation, which in turn have a foreignkey relation with ItemVariation model. My question is, how do I access the attributes of Item variation to get hold of dynamic data by using the model Item. But I'm not being able to do so. Can anyone please help me with this?
My models.py:
class Item(models.Model):
title = models.CharField(max_length=120)
price = models.FloatField()
class Variation(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
name = models.CharField(max_length=50) # size, color
class ItemVariation(models.Model):
variation = models.ForeignKey(Variation, on_delete=models.CASCADE)
value = models.CharField(max_length=50) # small, medium large etc
My admin.py:
class ItemVariationAdmin(admin.ModelAdmin):
list_display = ['variation',
'value']
list_filter = ['variation', 'variation__item']
search_fields = ['value']
class ItemVariationInLineAdmin(admin.TabularInline):
model = ItemVariation
extra = 1
class VariationAdmin(admin.ModelAdmin):
list_display = ['item',
'name']
list_filter = ['item']
search_fields = ['name']
inlines = [ItemVariationInLineAdmin]
admin.site.register(ItemVariation, ItemVariationAdmin)
admin.site.register(Variation, VariationAdmin)
My views.py:
class ItemDetailView(DetailView):
model = Item
template_name = 'products/product.html'
My product.html:
<h1 class="product-title">{{ item.title }}</h1>
<a href="#">
<span class="badge purple mr-1">{{ object.get_category_display }}</span>
</a>
<form class="form" method="POST" action="{{ object.get_add_to_cart_url }}">
{% csrf_token %}
{% if object.itemvariation_set.all %}
<h5>{{ object.itemvariation_set.all }}</h5>
{% endif %}
<div class="action">
<button class="btn btn-success">Add to Cart</button>
</div>
</form>
this way you can display item variation set
{% for var in object.variation_set.all %}
<h5>{{ var.name }}</h5>
{% for item in var.itemvariation_set.all %}
<h5>{{ item.value }}</h5>
{% endfor %}{% endfor %}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.