我知道,这不是描述性最强的标题,但是通过示例可以更好地说明我的问题。
假设我正在开发一个应用程序,该应用程序将允许学生司机记录他们的驾驶时间。他们需要记录白天和晚上的时间,因此默认情况下我提供两个字段。但是,为了争辩而说,一个好奇的少年决定,他也想跟踪自己在雷暴天气中度过的时间。另一个决定要跟踪他在雪中驾驶的时间。使用Django使之成为可能的最佳方法是什么?
这是我现在如何思考的粗略概述。假设它在models.py
中:
class Trip(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
date = models.DateField()
class DrivingTime(models.Model):
trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
tag = models.ForeignKey(AcceptableTimeType, on_delete=models.CASCADE)
hours = models.TimeField()
class AcceptableTimeType(models.Model):
name = models.CharField(max_length=50)
# null/blank if visible for everyone
# otherwise, should link to the user that wants this specific type of time tracked
user = models.ForeignKey(User, on_delete=CASCADE, blank=True, null=True)
我在Django admin中预设了默认时间类型(在此示例中为日/夜)列表,并将“用户”字段保留为空白。然后,用户可以添加他们想要的任何类型的时间(例如下雨或下雪)。然后,当我创建用户可以填写的那些时间字段的列表时,我选择了AcceptableTypeTime
项的子集,这些子集要么链接到当前字段,要么为空。
看来这应该可行,但是我也觉得应该有一个我可能完全不知道的通用解决方案。任何朝着正确方向的指针将不胜感激!