Django - Невозможно объединить 2 модели
Проблема: Объединение 2 моделей в Django.
Error: Ошибка при отрисовке шаблона. Прямое присвоение обратной стороне множества "многие ко многим" запрещено. Вместо этого используйте entity_id.set().
Я прочитал все темы на SO. Попробовал все предложенные решения, прочитал документацию Django и думаю, что я просто должен быть фундаментально неправильно понимаю что-то. Любая помощь будет очень признательна.
У меня есть 2 модели. Entity и File.
У Entity может быть несколько Files, но каждый File имеет только 1 Entity.
Первичные ключи каждой таблицы - это просто целые числа с автоматическим инкрементом. Поэтому я хочу объединить столбец entity_id из File с entity_id из Entity. Согласно документации я установил entity_id в File в качестве ForeignKey. И я установил entity_id как уникальный в Entity
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 %}
При использовании select_related
вы должны передать имя поля, которое будет выбрано.
Попробуйте это:
class TestListView(ListView):
queryset = File.objects.select_related("entity").all()
template_name = "operations/files/test_list.html"