2016-12-24 101 views
1

我想構建一個消息應用程序。django在另一個模型中定義之前使用模型

型號:

class Thread(models.Model): 
    subject = models.CharField(max_length=255, blank=True, null=True) 
    user = models.ManyToManyField(User, related_name='thread_set') 

    def thread_creator(self): 
     return self.message_set.first().sender 

class Message(models.Model): 
    thread = models.ForeignKey(Thread, related_name='message_set', blank=True, null=True) 
    pub_date = models.DateTimeField(default=timezone.now) 
    sender = models.ForeignKey(User) 
    body = models.TextField() 

所以,當發送一個消息,將創建一個新的線程。那第一條消息將與該線程有一個外鍵關係。所以,發送到這個線程的任何其他消息將與該線程具有外鍵關係。這工作正常。

但是,假設我想添加對特定消息的回覆。所以現在,它應該爲該消息創建一個新線程,並且一條消息只能有一個線程(它將保存其他的回覆消息)。這使新線程與該消息成爲一對一的關係。

於是,我改變了線程模型這樣:

class Thread(models.Model): 
    subject = models.CharField(max_length=255, blank=True, null=True) 
    user = models.ManyToManyField(User, related_name='thread_set') 
    message = models.OneToOneField(Message, blank=True, null=True) 

但是,因爲消息模型還沒有定義,它給我的錯誤:

NameError: name 'Message' is not defined

如何使用類模型在定義之前?還是有其他解決問題的方法嗎?

回答

2

您可以通過它的名字引用它(作爲一個字符串),如下所示:

message = models.OneToOneField('Message', blank=True, null=True) 
+1

是啊!就是這樣。謝謝。 – Kakar

+0

不客氣 –

相關問題