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

2024-04-25 05:07:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关系模型,它映射了两个模型,即我的用户和它的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\u位置,我需要user和position的实例。我可以使用user.username字段轻松地获取用户模型实例,但是如何获取position实例呢。在位置实例中,我通过使用filter函数使用一些逻辑推导。如何获取实例哪个函数可以帮助我使用某些条件获取实例

以下是我尝试过的:

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() 

Tags: 实例namepos模型selfobjectsmodelsposition
1条回答
网友
1楼 · 发布于 2024-04-25 05:07:27

不管你在做什么,比如过滤数据库会给你一个查询集,你需要这个实例。如果有两个过滤器,那么还必须有两个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的第一个实例,第二个第一个实例获取第一个filter

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

相关问题 更多 >