型号#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