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 ) ''')