rstJkee
@rstJkee

Как связать резюме с моделью User 1 к 1?

Столкнулся с проблемой, что не могу связать аккаунт пользователя с его резюме. Имеется модель User(обычная, которая от джанго идёт) и модель ResumesModel
class ResumesModel(models.Model):
    client_id = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    work_experience = models.IntegerField(verbose_name="Опыт работы")
    specialization = models.TextField(verbose_name="Специальность")
    desired_salary = models.IntegerField(verbose_name="Желаемая зарплата", blank=True)
    hard_skills = models.TextField(verbose_name="Ключевые навыки")
    about_you = models.TextField(verbose_name="О себе")
    native_language = models.TextField(verbose_name="Родной язык")
    foreign_language = models.TextField(verbose_name="Иностранный язык")

    def __str__(self):
        return str(self.client_id)

Вообще, сама задумка мне кажется не правильной, ибо процесс должен быть автоматизированным в плане захвата текущего пользователя, а мне необходимо выбирать сущность из списка (что является полным бредом). Подскажите пожалуйста, как можно сделать лучше или как, хотя бы, пофиксить ошибку: ValueError at /work/resumes/create. Cannot assign "1": "ResumesModel.client_id" must be a "User" instance.
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
rstJkee
@rstJkee Автор вопроса
Всё пофиксил, всё работает. Общая идея заключается в том, что создать форму по тем полям, которые есть в ResumesModel, client_id сделать скрытым и не заполнять его (ну или заполнять, всё равно вообще). Дальше на стороне django уже есть такой код
def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        if self.request.method == "POST" and hasattr(self, 'object'):
            data = kwargs["data"].dict()
            data.update({"client_id": self.request.user.id})
            kwargs["data"] = data
        return kwargs

Этот метод реализован в классе с наследованием от CreateView и LoginRequiredMixin. То есть, идёт физическое изменение id клиента на id зарегистрированного и авторизованного отправителя
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы