Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取要用作外键的模型实例,以便将数据添加到Django中的其他模型_Python_Django_Django Models_Django Views_Django Shell - Fatal编程技术网

Python 获取要用作外键的模型实例,以便将数据添加到Django中的其他模型

Python 获取要用作外键的模型实例,以便将数据添加到Django中的其他模型,python,django,django-models,django-views,django-shell,Python,Django,Django Models,Django Views,Django Shell,我有一个关系模型,它映射了两个模型,即我的用户及其位置。这里的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_u

我有一个关系模型,它映射了两个模型,即我的用户及其
位置。这里的
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_位置,我需要用户和位置的实例。我能够使用
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() 

无论您在做什么,即过滤数据库将为您提供一个查询集,您都需要实例。您有两个筛选器,然后还必须有两个first()才能获取实例。这样做

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
的第一个实例,第二个first用于第一个
filter


注意:任何模型的实例都可以通过使用filter然后使用first()函数获得。这对于填充关系表或指定外键非常有帮助,因为它需要链接到的另一个模型的实例。如果有其他方法,请在评论中指出

当执行model.objects.filter时,这将返回与该查询匹配的所有项目,但我发现您的模型位置有一个字段unique=True,这意味着不需要对其进行筛选。而是使用get

emp_pos=emp_position(emp_uname=用户, position\u name=position.objects.get(position\u name=“来自逻辑”))


emp_pos.save()

最可能的错误是
来自逻辑部分
你能展示一下你写的东西吗