在这种情况下,如何编写__str__ func?

时间:2020-03-17 13:41:04

标签: python django

我有一个“用户”模型和一个名为“ user_agent”的模型,其中“用户”模型具有一个对用户模型的OneToOneField,该模型具有对“用户”模型的外键。我如何在__str__函数中使用'first_name'和'last_name'?!

class users(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, default='')
    user_type = models.ForeignKey(types, on_delete=models.SET_NULL, blank=True, null=True)
    mobile = models.CharField(max_length=20)
    active_code = models.CharField(max_length=50, blank=True)
    date_send_active_code = models.DateField(default=now, blank=True)
    count_send_active_code = models.IntegerField(default=0)
    token = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
class user_agent(models.Model):
    user = models.ForeignKey(user_models.users, on_delete=models.CASCADE)
    agent = models.ForeignKey(agents, on_delete=models.CASCADE)
    parent = models.ForeignKey("self", on_delete=models.CASCADE, default='1')

    def __str__(self):
        return "(" + self.user.first_name + " " + self.user.last_name + ")"

2 个答案:

答案 0 :(得分:1)

您想要self.user.user.first_name-但我建议您将user模型名称更改为Profile之类,以免造成混淆(并通常将CamelCase用作模型名称)。

答案 1 :(得分:0)

def __str__(self):
    return "({} {})".format(self.user.first_name, self.user.last_name)

或者如果您使用的是python 3,请使用f字符串:

def __str__(self):
    return f"({self.user.first_name} {self.user.last_name})"

编辑:不确定是否要询问useruser_agent模型,如果它是用户模型,则只需使用上面的代码,但将self.first_name和{{1 }}。

此外,通常python类是大写的,没有下划线: self.last_nameclass User(models.Model)