class Rider(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __unicode__(self):
return self.first_name + " " + self.last_name
class Ride(models.Model):
ride_name = models.CharField(max_length=200)
ride_meeting_place = models.CharField(max_length=2000)
ride_description = models.CharField(max_length=2000)
ride_leader = models.ForeignKey(Rider)
ride_date = models.DateTimeField('date of ride')
ride_miles = models.FloatField('scheduled miles')
def __unicode__(self):
return self.ride_name
class Miles(models.Model):
rider_id = models.ForeignKey(Rider)
ride_id = models.ForeignKey(Ride)
actual_miles = models.FloatField('actual miles')
def __unicode__(self):
return self.rider_id + " " + self.ride_id + " " + self.actual_miles
最后一行是我遇到麻烦的。
答案 0 :(得分:2)
我会稍微整理你的模特:
class Rider(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __unicode__(self):
return self.first_name + " " + self.last_name
class Ride(models.Model):
name = models.CharField(max_length=200)
meeting_place = models.CharField(max_length=2000)
description = models.CharField(max_length=2000)
leader = models.ForeignKey(Rider)
date = models.DateTimeField('date of ride')
miles = models.FloatField('scheduled miles')
def __unicode__(self):
return self.name
class Miles(models.Model):
rider = models.ForeignKey(Rider)
ride = models.ForeignKey(Ride)
actual_miles = models.FloatField('actual miles')
def __unicode__(self):
return "%s %s %s" % (self.rider, self.ride, self.actual_miles)
无需在所有Ride
字段前添加ride_
。
请勿拨打外键rider_id
,只需使用rider
(与ride_id
相同)
然后使用字符串格式化程序强制unicode。
答案 1 :(得分:1)
您无需添加_id
前缀:
class Miles(models.Model):
rider = models.ForeignKey(Rider)
ride = models.ForeignKey(Ride)
actual_miles = models.FloatField('actual miles')
def __unicode__(self):
return "%s %s %s" % (self.rider, self.ride, self.actual_miles)
通过使用字符串格式,您实际上正在加入str(self.rider)
,str(self.ride)
和str(self.actual_miles)
,这意味着需要调用self.rider.__unicode__()
和self.ride.__unicode()__
。引自docs:
如果您在模型上定义
__unicode__()
方法,而不是__str__()
方法,Django会自动为你提供__str__()
调用__unicode__()
然后将结果正确转换为UTF-8 编码的字符串对象这是推荐的开发实践: 仅定义__unicode__()
并让Django负责转换 在需要时串起对象。