2

在我第一次进入 django 世界的旅程中,我试图让一个模型 unicode 函数引用另一个带有外键引用的模型 unicode 函数。这就是我所拥有的,但它不起作用

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

最后一行是我遇到的麻烦。

4

2 回答 2

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。

于 2013-09-24T19:16:22.440 回答
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)and str(self.actual_miles),这意味着在后台调用self.rider.__unicode__()and self.ride.__unicode()__。引用自文档

如果您__unicode__()在模型上定义方法而不是__str__() 方法,Django 将自动为您提供__str__()调用__unicode__(),然后将结果正确转换为 UTF-8 编码的字符串对象。这是推荐的开发实践:只定义__unicode__()并让 Django 在需要时负责转换为字符串对象。

于 2013-09-24T19:13:53.173 回答