以字符串Django的形式返回OneToOneField中的值

2024-10-03 11:14:20 发布

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

我有一个带有OneToOneField(指向第二个模型)的模型,我想在第二个模型的变量内返回值

这是第二个模型:

class EstablishmentTable(models.Model): #Tabla de establecimientos

    #id for the 'pk as we have not declare any
    etmail = models.CharField(max_length=45)
    etpass = models.CharField(max_length=1024) #SHA-1024, SHA-512. SHA-256
    etname = models.CharField(max_length=30)
    etnumqueue = models.IntegerField()

    def __str__(self):
        return "name: "+self.etname+" mail: "+self.pk

这是第一款:

class QueueTable(models.Model): #Tabla de colas

    #id for the 'pk as we have not declare any
    qtname = models.CharField(max_length=30)
    qtestablishment = models.OneToOneField(EstablishmentTable, on_delete=models.CASCADE,null=True)
    qtnumstate = models.IntegerField()
    qtdate = models.DateField(auto_now_add=True)

    def __str__(self):
        return "name: "+self.qtestablishment+" mail: "+self.pk

如何访问变量?如果我写 return "name: "+self.qtestablishment+" mail: "+self.pk它返回:

TypeError: can only concatenate str (not "EstablishmentTable") to str

先谢谢你


Tags: name模型selfreturnmodelsnotmaillength
1条回答
网友
1楼 · 发布于 2024-10-03 11:14:20

您可以获取self.qtestablishment的名称,因为您将此Null设置为可启用的,但是,您需要防止None

class QueueTable(models.Model): #Tabla de colas
    qtname = models.CharField(max_length=30)
    qtestablishment = models.OneToOneField(EstablishmentTable, on_delete=models.CASCADE,null=True)
    qtnumstate = models.IntegerField()
    qtdate = models.DateField(auto_now_add=True)

    def __str__(self):
        if self.qtestablishment is None:
            return …  # return something in case qtestablishment is None
        return 'name: {} mail: {}'.format(self.qtestablishment.etname, self.pk)

或者您可以在self.qtestablishment对象上调用str(..),从而返回您在EstablishmentTable上定义的__str__方法的结果。例如,我们可以使用.format(…)来实现这一点:

class QueueTable(models.Model): #Tabla de colas
    qtname = models.CharField(max_length=30)
    qtestablishment = models.OneToOneField(EstablishmentTable, on_delete=models.CASCADE,null=True)
    qtnumstate = models.IntegerField()
    qtdate = models.DateField(auto_now_add=True)

    def __str__(self):
        return 'name: {} mail: {}'.format(self.qtestablishment, self.pk)

Note: Models normally have no Table suffix. A model is not a table, it is stored in a relational database as a table, but even then it has extra logic like validators, managers, etc.

相关问题 更多 >