【问题标题】:Django - Can not join 2 modelsDjango - 无法加入 2 个模型
【发布时间】:2023-01-31 18:10:15
【问题描述】:

问题:在 Django 中加入 2 个模型。

错误: 模板渲染时出错。禁止直接赋值给多对多集合的反面。请改用 entity_id.set() 。

我已经阅读了 SO 上的所有线程。尝试了所有建议的解决方案,阅读了 Django 文档并认为我一定是从根本上误解了某些东西。任何帮助将非常感激。

我有 2 个模型。实体文件.

一个实体可以有倍数文件但每个文件只有 1实体.

每个表的主键只是自动递增的整数。所以我想加入专栏实体编号文件实体编号实体.根据我设置的文档实体编号文件作为外键。我已经设置实体编号作为独一无二的实体

class Entity(models.Model):
    pk_entity = models.AutoField(primary_key=True)
    entity_id = models.IntegerField(blank=True, null=True, unique=True)  
    name = models.CharField(blank=True, null=True)
    
    class Meta:
        managed = False
        db_table = 'entities'


class File(models.Model):
    pk_file = models.AutoField(primary_key=True)
    filename = models.CharField(blank=True, null=True)    
    entity_id = models.ForeignKey(Entity, on_delete= models.CASCADE, to_field='entity_id')
    

该视图只是试图渲染它。我试过使用 .all() 而不是 select_related() 但没有数据呈现。

class TestListView(ListView):  
    queryset = File.objects.select_related()    
    template_name = "operations/files/test_list.html"

这是 html:

{% extends "base.html" %}
{% block content %}
<div>
    <div>       
        <ul>
            {% for x in object_list %}
            <li>             
                {{x}} 
             </li>
            {% empty %}
            <p>Empty</p>
            {% endfor %}
        </ul>      
    </div>
</div>
{% endblock %}

【问题讨论】:

  • 您是否尝试检查object_listquery_set 的内容并确保数据库已满?因为.all() 不关心外键,如果有与外键相关的错误,它应该给你一条错误消息。
  • 数据库已填充。 All() 返回文件数据但不返回实体数据。目前我正在使用 selected_related() 作为文档和 SO 上的其他线程建议这是引入 FK 的正确方法
  • 我还会检查 object_list 是否已填充并检查某些 test.py 文件上 File.objects.select_related() 的内容以确定它是查询集问题还是 html 渲染问题

标签: python django django-models django-rest-framework django-views


【解决方案1】:

使用select_related时,您应该传递要选择的字段名称。

尝试这个:

class TestListView(ListView):  
    queryset = File.objects.select_related("entity").all()    
    template_name = "operations/files/test_list.html"

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多