Django SQL сырой запрос не работает
models.py
class Birds(models.Model):
id_birds = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
id_user = models.ForeignKey('User', on_delete=models.PROTECT, null=True)
name = models.CharField(max_length=100, null=False, unique=True)
PNG = models.ImageField(upload_to='images')
feather_color = models.TextField(max_length=70, null=False)
class ViewedUser(models.Model):
id_view = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
id_birds = models.ForeignKey('Birds', on_delete=models.PROTECT, null=False, unique=True)
id_user = models.ForeignKey('User', on_delete=models.PROTECT, null=False, unique=False)
DataTime = models.DateTimeField(null=False, unique=False)
class User(models.Model):
id_user = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
full_name = models.CharField(max_length=100, null=False)
login = models.CharField(max_length=50, null=False, unique=True)
mail = models.EmailField(null=False, unique=True)
password = models.CharField(max_length=100, null=False)
def __str__(self):
return self.name, self.PNG, self.feather_color, self.id_birds
views.py
def viewUser(request):
"""Вывод просмотренных птиц пользователям."""
#login = request.POST.get("login") # FIXME Не стоит передавать значение от пользователя в сырой SQL-запрос.
sql_get = '''SELECT Birds.name, Birds.PNG, Birds.feather_color, ViewedUser.DataTime
FROM birdsviews_user AS User, birdsviews_birds AS Birds,
birdsviews_vieweduser AS ViewedUser
WHERE User.login = %s
AND Birds.id_birds = ViewedUser.id_birds
AND User.id_user = ViewedUser.id_user
GROUP BY ViewedUser.DataTime;''' % login
'''
По умолчанию Django выясняет имя таблицы базы данных путем присоединения к “маркировке приложения модели”
– имя, в котором Вы использовали manage.py startapp – к имени класса модели, с подчеркиванием между ними.
'''
SQL = 'SELECT * FROM birdsviews_birds '
view = ViewedUser.objects.raw(sql_get) # FIXME может привести к SQL-инъекциям.
# if view is None:
# return render(request, 'viewUser.html/', {'login': login})
return render(request, 'viewUser.html/', {'view': view})
![введите сюда описание изображения]
Необходимо для столбцов внешних ключей добавлять строку_id (ViewedUser.id_user_id)