【问题标题】:How to render information from a ForeignKey field through DetailView class?如何通过 DetailView 类从 ForeignKey 字段呈现信息?
【发布时间】:2020-10-16 12:56:07
【问题描述】:

我有两个模型(分类和分布),它们如下:

# models.py file

class Taxonomia(models.Model): 
    id_cactacea = models.AutoField(primary_key=True)
    subfamilia = models.CharField(max_length=200)

class Distribucion(models.Model):
    id_distribucion = models.AutoField(primary_key=True)
    localidad = models.TextField(null=True, blank=True)
    taxonomia = models.ForeignKey(Taxonomia, on_delete=models.CASCADE, default=1)

正如您在 Distribucion 中看到的,与分类表存在一对多关系。

在“admin.py”文件中实现这两个模型,以便您可以从 Taxonomia 编辑分布表

class DistribucionInline(admin.TabularInline):
    model = Distribucion
    extra = 0

class TaxonomiaAdmin(admin.ModelAdmin):
    actions = None # desactivando accion de 'eliminar'
    list_per_page = 20
    search_fields = ('genero',)
    radio_fields = {"estado_conservacion": admin.HORIZONTAL}
    inlines = [DistribucionInline]

admin.site.register(Taxonomia, TaxonomiaAdmin)

“view.py”文件依次呈现分类表如下:

from repositorio.models import Taxonomia, Distribucion

class CactaceaDetail(DetailView):
    model = Taxonomia
    template_name = 'repositorio/cactacea_detail.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['distribuciones'] = Distribucion.objects.all()
        return context

我尝试从模板中访问上下文 ['distribuciones'] 信息,如下所示,但没有得到任何结果:

{% for obj in object.distribuciones %}
    {{ obj.localidad }}
{% endfor %}

OBS:对于每个 Taxonomia 元素,Distribucion 表中会有四个元素,所以我需要使用 FOR 循环

我在“CactaceaDetail”视图中添加分类表信息的方式是否正确?

我阅读模板中信息的方式是否正确?

如何可视化“CactaceaDetail”使用 DJANGO shell 发送到模板的所有信息,以便将来更好地调试?

谢谢。

【问题讨论】:

    标签: python python-3.x django django-views django-templates


    【解决方案1】:

    尝试从模板中的 for 循环中删除“对象”:

    {% for obj in distribuciones %}
        {{ obj.localidad }}
    {% endfor %}
    

    原因是因为您在常规上下文中传递distribuciones,而不是作为object 类的一部分,因此您不能使用object.distribuciones 引用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2019-12-29
      • 2011-07-16
      相关资源
      最近更新 更多