2013-05-07 31 views
0

當運行「蟒manage.py的runserver」,下面2個錯誤信息,則打印4次:Django的錯誤:「訪問器用於與相關領域的場衝突」

transcription.treatment: Accessor for field 'treatment_ptr' clashes with related field 'Treatment.treatment'. Add a related_name argument to the definition for 'treatment_ptr'. 
transcription.treatment: Reverse query name for field 'treatment_ptr' clashes with related field 'Treatment.treatment'. Add a related_name argument to the definition for 'treatment_ptr'. 

下面是我的代碼。在共享/ models.py:

class Treatment(models.Model): 
    code = RandomCharField(length=6) 
    experiment_id = models.CharField(max_length = 10, null = True) 


    base_pay = models.PositiveIntegerField(default=20) 

    def was_started_recently(self): 
     expiry_time = timedelta(minutes = 5) 
     if datetime.now() - self.time_started < expiry_time: 
      return True 

class OfferTreatment(Treatment): 
    max_offer_amount = models.PositiveIntegerField(default=50) 
    increment_amount = models.PositiveIntegerField(default=5) 

    def offer_choices(self): 
     return range(0, self.max_offer_amount + 1, self.increment_amount) 

    def is_valid_offer(amount): 
     return amount in self.offer_choices() 

    class Meta: 
     abstract = True 

在遊戲/轉錄/ models.py:

class Treatment(shared.models.OfferTreatment): 
    short_name = 'tr' 
    long_name = 'Transcription' 

有什麼建議?

+1

這是整個模型? – karthikr 2013-05-07 20:15:04

+0

是的,就是這樣。 – RexE 2013-05-08 15:40:45

回答

1

你有兩個模型叫做治療。雖然OfferTreatment是抽象的,但共享版本的治療不是。您應該將其標記爲抽象,並將其重命名爲BaseTreatment。

或者,您可能需要進行轉錄。治療成代理模式。