Ошибка no such column при попытке получить данные в запросе raw() в Django

У меня есть следующие классы в моем models.py

class Users(models.Model):
    username = models.CharField('User Name', null=False, max_length = 50)
    password = models.CharField('User Password', max_length=50)

    def __str__(self):
        return self.username

class Photo(models.Model):
    name = models.CharField(max_length=100, default="Image")
    id = models.AutoField(primary_key=True)
    uploader = models.ForeignKey(Users, default=None, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Photo_History(models.Model):
    image = models.ImageField(upload_to="media/results")
    upload_time = models.DateTimeField(auto_now_add=True, blank=True)
    photo_id = models.ForeignKey(Photo, null=True, blank=True, on_delete=models.CASCADE)

Структура таблицы выглядит следующим образом,

Для класса Пользователи,

username password
abc 123
dec 123
john 123

Для класса Фото,

id name uploader (foreign key)
1 first abc
2 second abc
3 third dec

Для класса Фотоистория,

image upload_time photo_id (foreign key)
img 12-01-2022 1
img 12-03-2022 1
img 12-04-2022 3
img 12-05-2022 2

What I am trying to access is, a user is logged in. I need to get the Photo History Objects along with the "name" from the Photo model of the user who's currently logged in.

<
name img upload_time
first img 12-01-2022
first img 12-03-2022
second img 12-05-2022

I tried to search a way to write a command using filter function to get this but I couldn't find any results that showed how you can get data from two different tables in a single query. And instead, people mentioned I should be using raw() query.

Так что я использовал необработанный запрос, который, как мне кажется, полностью подходит, но я получаю странную ошибку (которую вы получаете, если вы не сделали миграции, но мои миграции были сделаны давно, и столбец, для которого он показывает ошибку, я могу легко получить данные из него в других запросах)

.

Это функция, которую я имею с запросом,

def history(request):
    if request.session.has_key('is_logged'):
        current_user_id= request.session['user_id']
        q = "select p.name, h.image, h.upload_time from firstApp_Photo_History h, firstApp_Photo p where p.uploader=%s;"
        photos = Photo_History.objects.raw(q, [str(Users.objects.filter(username=current_user_id)[0])])
        
        print("Photos: ", photos)
        for p in photos:
            print(p.name)
            print(p.username)
            print(p.upload_time)
        return render(request, 'history.html', {'ID':current_user_id, 'photos':photos})
    else:
        return redirect('login')

Когда я пытаюсь запустить это, я получаю ошибку, которая

no such column: p.uploader

Может ли кто-нибудь сказать мне, в чем проблема и как я могу ее решить?

Здесь полная ошибка,

Просматривая документацию Django, я обнаружил, что Django добавляет _id в конце имени внешнего ключа.

Следовательно, я смог решить свою проблему, изменив p.uploader на p.uploader_id. Странная проблема, но именно так работают модели Django.

Заключительный вопрос был,

q = "select h.id, p.name, h.image, h.upload_time from firstApp_Photo_History h, firstApp_Photo p where p.uploader_id=%s;"
Вернуться на верх