2013-09-24 118 views
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 

最後一行是我遇到的麻煩之一。

+0

當你說「它不工作」時,你具體是指什麼? – qaphla

+0

錯誤是'TypeError:不支持的操作數類型爲+:'Rider'和'str' '現在解決了。 – dzanot

回答

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

然後使用字符串格式化強制統一。

+0

謝謝你們!現在來做一些關於字符串格式與連接的研究... – dzanot

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報價:

If you define a __unicode__() method on your model and not a __str__() method, Django will automatically provide you with a __str__() that calls __unicode__() and then converts the result correctly to a UTF-8 encoded string object. This is recommended development practice: define only __unicode__() and let Django take care of the conversion to string objects when required.

+0

現在是否已經修復了謝謝,但澄清:如果我把每個字段放在一個'str()'函數中,它的行爲會如預期的那樣嗎?我收到的原始錯誤是TypeError:不支持的操作數類型爲+:'Rider'和'str' ' – dzanot

+1

@dzanot yup,你可以把它放在'str()'中。 – alecxe