简体   繁体   中英

How to get attributes from foreignkey model in Django?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM