Django / объединенный запрос
Проверил все документы и вопросы/ответы здесь, но не добился успеха. Нужна ваша помощь. У меня есть опыт в чистом PHP и MySQL, но фреймворки убивают меня.
Мои модели;
class Projects(models.Model):
id = models.AutoField(primary_key=True)
subject= models.CharField(max_length=50)
sender= models.ForeignKey(User, on_delete=models.CASCADE)#inserting django's default user id
Это стандартная, но отредактированная таблица django auth_user
CREATE TABLE "auth_user" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"password" varchar(128) NOT NULL,
"last_login" datetime NULL,
"is_superuser" bool NOT NULL,
"username" varchar(150) NOT NULL UNIQUE,
"first_name" varchar(150) NOT NULL,
"last_name" varchar(150) NOT NULL,
"email" varchar(254) NOT NULL,
"is_staff" bool NOT NULL,
"is_active" bool NOT NULL,
"date_joined" datetime NOT NULL,
"tck_no" varchar(11) NOT NULL
)
Когда я хочу получить свой проект, я использую обычно;
SELECT u.*, p.* FROM users u, projects p WHERE u.id=p.sender;
Вышеприведенный код нормально возвращает все поля в обеих таблицах.
В django viewmodel;
@login_required(login_url="/login/") def others_projects(request): projectlist = Projects.objects.all().filter(sender_id=request.user.id)
Вышеприведенный код возвращает поля таблицы Projects, но не могу понять, как получить совпадение записи по полю first_name из используемого внешнего ключа users?
Если вы выполняете итерацию через ваш projectlist, вы можете получить доступ к нему в таком виде.
projectlist = Projects.objects.filter(sender=request.user)
for p in projectlist :
print(f'First name is {p.sender.first_name}')
https://docs.djangoproject.com/en/4.0/ref/models/querysets/#filter
https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/