在尝试在 django 模型中返回 id 和字段值时收到错误作为"decoding to str: need a bytes-like object, int found"



型号#1

class Add_Job(models.Model):

job_name=models.CharField(max_length=254)
client=models.ForeignKey(Client,on_delete=CASCADE,related_name='client')
#client=models.ManyToManyField(Client)
project=models.ForeignKey(Project,on_delete=CASCADE,related_name='project')
#project=models.ManyToManyField(Project)
user=models.ForeignKey(Users,on_delete=CASCADE)
Hours=models.TimeField(null=True)
start_Date = models.DateTimeField(max_length=10)
end_Date=models.DateTimeField(max_length=10)

def __str__(self):
return str(self.id, self.job_name)

型号#2

class Add_Timelog(models.Model):


project=models.ManyToManyField(Project)
client=models.ManyToManyField(Client)
Job=models.ManyToManyField(Add_Job)
#Date = models.DateField(max_length=100 ,auto_now_add=True,editable=True)
Date= models.DateField(default = datetime.date.today)
Hours=models.TimeField(null=True)

def __str__(self):
return str(self.Date)

当我试图从"Add_job"模型返回"id"one_answers"job_name"时,它正在数据库表中得到反映。但是"Add_timelog"模型得到了一个错误

在/api/Add_Timelog/解码到str时出现TypeError:需要一个字节,如对象,int找到

不知道为什么会出现错误。

更新后1:

class Add_Timelog(models.Model):


project=models.ManyToManyField(Project)
client=models.ManyToManyField(Client)
Job=models.ManyToManyField(Add_Job)
#Date = models.DateField(max_length=100 ,auto_now_add=True,editable=True)
Date= models.DateField(default = datetime.date.today)
Hours=models.TimeField(null=True)

def __str__(self):
return str( '{} {}'.format(self.Date, self.Hours))

型号2

class Consolidated(models.Model):

emp_name=models.ManyToManyField(Users,related_name="employee_name+")
proj_name=models.ManyToManyField(Project)
custom_name=models.ManyToManyField(Client)
Cons_date=models.ManyToManyField(Add_Timelog)
bill_no_bill=models.ManyToManyField(Users,related_name="billable_and_non_billable+")
hour_spent = models.ManyToManyField(Add_Timelog,related_name="hour_spent")

def __str__(self):
return str(self.emp_name)

因此,根据属性方法代码,它将值作为对象而不是值返回。但我定义了一个str函数并删除了property方法,我得到了值,但日期和小时都在同一个字段中。但根据我的模型";"合并";,我需要分别得到那个日期和时间。在django模型中可以做到这一点吗?

这看起来像是Add_Job模型的问题,而不是Add_Timelog。在str方法中,您试图将id和job_name转换为str,但这会引发TypeError。尝试将return str(self.id, self.job_name)更改为return '{} {}'.format(str(self.id), self.job_name),它将把对象的id转换为字符串,并将其放在第一个{}和job_name中,后者已经是第二个{}中的字符串

如果您想同时访问Date和Hours,可以使用@property方法decorator。在您的情况下,您需要在Add_Timelog模型中进行编写。

@property
def date_and_hours(self):
return '{} {}'.format(self.Date, self.Hours)

若要获取它们的值而不是字符串表示,只需从属性返回两个值,但需要对它们进行解包。

@property
def date_and_hours(self):
return self.Date, self.Hours

最新更新