我正在进行乘车共享申请。我需要帮助设计私人消息的模型。
我设计了以下模型,在查看视图时看起来很复杂。你们能指出一个更好,更容易的人吗?
class Ride(models.Model):
type = models.BooleanField(default=False)
add_source = models.ForeignKey(Address, related_name='source')
add_destination = models.ForeignKey(Address, related_name='destination')
ride_startDateTime = models.DateTimeField(default= datetime.datetime.now, blank=True)
ride_startPref = models.CharField(max_length=10, choices=CHOICES, default='None')
class Conversation(models.Model):
ride_id = models.ForeignKey(Ride)
class Messages(models.Model):
conversation_id = models.ForeignKey(Conversation)
ride_id = models.ForeignKey(Ride)
sender_id = models.ForeignKey(User, related_name='sender')
receiver_id = models.ForeignKey(User, related_name='receiver')
Content = models.TextField(max_length=1000,blank=True)
timestamp = models.DateTimeField(default= datetime.datetime.now, blank=True)
status = models.CharField(max_length=10,blank=True)
用户模型是内置的django。 请考虑以下用例:
1)对话必须与Ride整合, 例如:用户X是骑行3的所有者,用户Y可以联系X进行此骑行(3),然后将生成新的对话ID(77)。之后,他们之间发送的任何消息都应该在同一个会话ID下(77)。 如果另一个用户Z试图联系用户X以进行相同的乘车3,则必须生成新的会话ID(33)。
2)如果用户X有另一次乘坐4,那么如果用户Y通过其他乘车方式联系用户X,则必须生成新的对话ID(99)并且他们之间发送的所有消息应该在来自同一个对话id(99)。
答案 0 :(得分:0)
与:比较:
class Ride(models.Model):
type = models.BooleanField(default=False)
source_address = models.ForeignKey(Address, related_name='rides_from')
destination_address = models.ForeignKey(Address, related_name='rides_to')
started_at = models.DateTimeField(auto_now_add=True)
start_pref = models.CharField(max_length=10, choices=CHOICES, default='None')
class Conversation(models.Model):
ride = models.ForeignKey(Ride)
user1 = models.ForeignKey(User, related_name='conversations_as_user1')
user2 = models.ForeignKey(User, related_name='conversations_as_user2')
class Message(models.Model):
conversation = models.ForeignKey(Conversation)
posted_by = models.ForeignKey(User, related_name='messages')
content = models.TextField(max_length=1000)
posted_at = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=10,blank=True)
请记住,只要发件人或收件人都在删除邮件,就会删除邮件。