django模型设计为乘车共享应用,建议请

时间:2014-01-28 13:45:45

标签: python django database-design django-models database-schema

我正在进行乘车共享申请。我需要帮助设计私人消息的模型。

我设计了以下模型,在查看视图时看起来很复杂。你们能指出一个更好,更容易的人吗?

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

1 个答案:

答案 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)

请记住,只要发件人或收件人都在删除邮件,就会删除邮件。