django在另一个模型

时间:2016-12-24 06:52:17

标签: django django-models

我正在尝试构建一个消息传递应用程序。

模型:

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()

因此,当发送消息时,会创建一个新线程。并且第一条消息将与该线程具有外键关系。因此,发送到此线程的任何其他消息都将与该线程具有外键关系。这很好。

但是,假设我想添加对特定邮件的回复。所以现在,它应该为该消息创建一个新线程,并且一条消息只能有一个线程(它将保存其他回复消息)。这使得新线程与该消息形成一对一的关系。

所以,我将Thread模型更改为:

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'未定义

如何在定义之前使用类模型?或者还有其他方法可以解决问题吗?

1 个答案:

答案 0 :(得分:2)

您可以通过其名称(作为字符串)引用它,如下所示:

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