获取要用作外键的模型实例,以将数据添加到 Django 中的其他模型
Get instance of a model to be used as foreign key to add data to other model in Django
我有一个关系模型,它映射两个模型,即我的用户和它的 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.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
的第一个实例,第二个 filter
获得第一个实例 filter
。
注意:任何模型的实例都可以通过使用 filter 然后使用 first() 函数来获取。这些对于填充关系 table 或指定我们的外键非常有帮助,因为它需要我们链接到的另一个模型的实例。如果还有其他方法可以有人在评论中指出。
在执行 model.objects.filter 时,这将 return 所有与该查询匹配的项目,但我看到您的模型 Position 有 1 个字段 unique = True 这意味着不需要过滤器。而是使用 get.
emp_pos = Emp_position(emp_uname = 用户,
position_name = Position.objects.get(position_name="COMES FROM LOGIC"))
emp_pos.save()
我有一个关系模型,它映射两个模型,即我的用户和它的 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.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
的第一个实例,第二个 filter
获得第一个实例 filter
。
注意:任何模型的实例都可以通过使用 filter 然后使用 first() 函数来获取。这些对于填充关系 table 或指定我们的外键非常有帮助,因为它需要我们链接到的另一个模型的实例。如果还有其他方法可以有人在评论中指出。
在执行 model.objects.filter 时,这将 return 所有与该查询匹配的项目,但我看到您的模型 Position 有 1 个字段 unique = True 这意味着不需要过滤器。而是使用 get.
emp_pos = Emp_position(emp_uname = 用户, position_name = Position.objects.get(position_name="COMES FROM LOGIC"))
emp_pos.save()