Django объединяет таблицы с помощью ForeignKey

Я пытаюсь объединить 3 таблицы с помощью ForeignKey, но он возвращает значения Null. Я использую этот тег для вызова значений

{{ item.agent_name.agent_name }}

Вот мои модели:

class schedule(models.Model):
login_id = models.CharField(primary_key=True,max_length=20)
agent_name = models.CharField(max_length=100, blank=True, null=True)
team = models.CharField(max_length=100, blank=True, null=True)

class place_no(models.Model):
place_id = models.CharField(max_length=50, blank=True, null=True)
pc_no =  models.CharField(max_length=50, blank=True, null=True)

class Insight(models.Model):
login_id = models.CharField(primary_key=True,max_length=20)
place_id = models.CharField(max_length=50, blank=True, null=True)
agent_name = models.ForeignKey(schedule, on_delete=models.CASCADE,blank=True, null=True)
pc_no = models.ForeignKey(place_no, on_delete=models.CASCADE,blank=True, null=True)

Мое мнение:

def listings(request):
data = Insight.objects.select_related('agent_name', 'pc_no')

return render(request, 'pages/listings.html', {'data':data})

Ваш подход не является правильным. Я вижу, что вы думаете, что существует связь между таблицами с ForeignKey. На самом деле, связь может быть между объектами, а не между целыми таблицами.

Вам не следует называть классы с использованием змеиного_регистра. Всегда используйте CamelCase.

Чтобы иметь какое-либо отношение по ForeignKey, вы должны установить его во время создания или после этого:

s = schedule.objects.create(login_id="Some login", agent_name=...)
p = place_no.objects.create(place_id="Place id", pc_no=...)

Затем вы можете создать Insight объект, который будет связан с ними:

i = Insight.objects.create(agent_name=s, pc_no=p, ...)

Тогда в вашем представлении/шаблоне должен быть доступ к связанным объектам. PS. Для раннего знакомства с Django я рекомендую использовать Model.objects.all() или Model.objects.filter(...) вместо Model.objects.select_related(...). Так вы сможете лучше учиться и понимать. Позже будет время для улучшений.

Я могу порекомендовать прочитать официальную документацию .

Я решил свою проблему следующим образом, я смог обновить БД с помощью результата следующего запроса

    cursor = connection.cursor()
    cursor.execute('''
    UPDATE Insight
        SET agent = ( SELECT agent_name FROM schedule
            WHERE Insight.login_id = schedule.login_id ) ''')
Вернуться на верх