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/

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