【问题标题】:django models design for ride share application, suggestions plsdjango 模型设计为乘车共享应用程序,请提出建议
【发布时间】:2014-02-19 20:25:31
【问题描述】:

我正在开发拼车应用程序。我需要帮助设计私人消息的模型。

我设计了以下模型,在视图中查询它们看起来很复杂。你们能指定一个更好更简单的吗?

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) 对话必须与骑行相结合, 例如:用户 X 是乘车 3 的车主,用户 Y 可以联系 X 获取此乘车(3),然后将生成新的对话 id(77)。之后,他们之间发送的任何消息都应该在相同的会话 id(77) 下。 如果另一个用户 Z 试图联系用户 X 以获得相同的乘车 3,则必须生成一个新的会话 ID(33)。

2) 如果用户 X 有另一个叫 4 的乘车,那么如果用户 Y 通过其他乘车方式联系用户 X,它必须生成新的对话 id(99),并且他们之间在乘车上发送的所有消息都应该属于相同的对话 id(99)。

【问题讨论】:

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


    【解决方案1】:

    比较:

    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)
    

    请记住,每当 wither 发送者或接收者删除消息时,它们都会被删除。

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 2011-05-07
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多