2013-05-07 32 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。

或者,您可能需要进行转录。治疗成代理模式。