简体   繁体   English

如何从 Django 中的外键 model 获取属性?

[英]How to get attributes from foreignkey model in Django?

I have three models, item, variation and item_variations.我有三个模型,item、variation 和 item_variations。 The item has a foreignkey relation with variation, which in turn have a foreignkey relation with ItemVariation model.该项目与变化具有外键关系,而变化又与 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.我的问题是,如何使用 model 项目访问项目变化的属性以获取动态数据。 But I'm not being able to do so.但我不能这样做。 Can anyone please help me with this?谁能帮我解决这个问题?

My models.py:我的模型.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:我的管理员.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:我的意见.py:

class ItemDetailView(DetailView):
    model = Item
    template_name = 'products/product.html'

My product.html:我的产品。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 %}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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