我正在尝试构建一个消息传递应用程序。
模型:
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'未定义
如何在定义之前使用类模型?或者还有其他方法可以解决问题吗?
答案 0 :(得分:2)
您可以通过其名称(作为字符串)引用它,如下所示:
message = models.OneToOneField('Message', blank=True, null=True)