首页 > 解决方案 > 在 django 模型中,提供一组默认字段,但也允许用户添加自己的字段

问题描述

我知道,这不是最具描述性的标题,但我的问题可以用一个例子更好地说明。

假设我正在制作一个应用程序,允许学生司机记录他们的驾驶时间。他们需要记录白天和晚上的时间,所以我默认提供这两个字段。但是,为了争论,一个好奇的少年决定他也想跟踪他在雷暴中开车时所花的时间。另一个人决定他想跟踪他在雪地里开车的时间。使用 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 管理员中预先设置了默认时间类型列表(在本例中为白天/夜晚),并将用户字段留空。然后用户可以添加他们想要的任何类型的时间(例如下雨或下雪)。然后,当我创建用户可以填写的那些时间字段的列表时,我选择AcceptableTypeTime链接到当前字段或为空的项目子集。

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

标签: pythonsqldjangopostgresql

解决方案


推荐阅读