【发布时间】: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_list、query_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