在Django模型中,提供一组默认字段,但也允许用户添加自己的字段

时间:2019-09-02 04:29:17

标签: python sql django postgresql

我知道,这不是描述性最强的标题,但是通过示例可以更好地说明我的问题。

假设我正在开发一个应用程序,该应用程序将允许学生司机记录他们的驾驶时间。他们需要记录白天和晚上的时间,因此默认情况下我提供两个字段。但是,为了争辩而说,一个好奇的少年决定,他也想跟踪自己在雷暴天气中度过的时间。另一个决定要跟踪他在雪中驾驶的时间。使用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项的子集,这些子集要么链接到当前字段,要么为空。

看来这应该可行,但是我也觉得应该有一个我可能完全不知道的通用解决方案。任何朝着正确方向的指针将不胜感激!

0 个答案:

没有答案