Получить экземпляр модели для использования в качестве внешнего ключа для добавления данных в другую модель в Django - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть модель отношений, которая отображает две модели, которые являются моим пользователем и его position, как уже упоминалось. Здесь Emp_position - это модель отношений.

class Position(models.Model):
    position_name = models.CharField(max_length=20, unique=True)
    def __str__(self):
        return self.position_name


class Emp_position(models.Model):

    emp_uname = models.OneToOneField(User, related_name='emp_name', to_field='username', on_delete=models.CASCADE)
    position_name = models.ForeignKey(Position, related_name='position', to_field='position_name', on_delete=models.CASCADE)

    def __str__(self):
        return str(self.emp_uname) + " " + str(self.position_name)

Теперь для вставки данных в Emp_position мне нужен экземпляр user и Position. Я смог легко получить экземпляр пользовательской модели, используя поле user.username, но как мне получить экземпляр позиции. Экземпляр позиции, я получаю, используя некоторую логику, используя функцию фильтра. Как получить экземпляр, функция которого помогает мне получить экземпляр с использованием некоторого условия.

Вот что я пробовал:

emp_pos = Emp_position(emp_uname = user, position_name = Position.objects.filter(position_name="COMES FROM LOGIC").first())
emp_pos.save()

Но это не сохранение модели.

РЕДАКТИРОВАТЬ: Как указано в разделе комментариев

emp_pos = Emp_position(emp_uname = user, position_name = Position.objects.filter(position_name=NewProvisionalEmployeeMail.objects.filter(email="bhatnagarpulkitpb@gmail.com").values_list('position_name')).first())
emp_pos.save() 

1 Ответ

1 голос
/ 07 ноября 2019

Что бы вы ни делали, т.е. фильтровали базу данных, вы получите набор запросов, вам нужен экземпляр. У вас есть два фильтра, затем вы должны иметь два первых (), чтобы получить экземпляр. Сделайте это.

emp_pos = Emp_position(emp_uname = user, position_name = Position.objects.filter(position_name=Position.objects.filter(position_name="COMES FROM LOGIC THAT DERIVES THE FIELD NAME").first()[0]).first())
emp_pos.save()

первый first получает первый экземпляр для второго filter, а второй первый - для первого filter.

Примечание: экземпляр любогоМодель можно получить с помощью фильтра, а затем с помощью функции first (). Они очень полезны при заполнении таблицы отношений или для указания нашего внешнего ключа, так как для этого требуется экземпляр нашей другой модели, с которой мы связываемся. Если есть какой-то другой способ, может кто-то указать в комментариях.

...