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

2024-06-17 08:59:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这似乎应该奏效,但我也觉得应该有一个共同的解决方案,这个问题,我可能完全不知道。任何指向正确方向的指针都将不胜感激


Tags: djangomodelonmodels记录时间deletenull