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)

Вернуться на верх