python – Django Rest Framework – 通过函数传递Model数据,然后在同一模型的单独字段中发布输出

(Django 2.0, Python 3.6,Django Rest Framework 3.8)

我正在尝试填写下面模型中的calendarydays字段:

模型

class Bookings(models.Model):
    booked_trainer = models.ForeignKey(TrainerProfile, on_delete=models.CASCADE)
    booked_client = models.ForeignKey(ClientProfile, on_delete=models.CASCADE)
    trainer_availability_only = models.ForeignKey(Availability, on_delete=models.CASCADE)
    calendarydays = models.CharField(max_length=300, blank=True, null=True)

    PENDING = 'PENDING'
    CONFIRMED = 'CONFIRMED'
    CANCELED = 'CANCELED'

    STATUS_CHOICES = (
        (PENDING, 'Pending'),
        (CONFIRMED, 'Confirmed'),
        (CANCELED, 'Canceled')
    )


    booked_status = models.CharField(
        max_length = 9,
        choices = STATUS_CHOICES,
        default = 'Pending'
    )

    def __str__(self):
        return str(self.trainer_availability_only)

现在,我有一个从trainer_availability_only获取值并将这些值转换为日期时间字符串列表的函数,返回的输出如下所示:

{‘calendarydays’: [‘2018-07-23 01:00:00’, ‘2018-07-23 02:00:00’,
‘2018-07-23 03:00:00’, ‘2018-07-30 01:00:00’, ‘2018-07-30 02:00:00’,
‘2018-07-30 03:00:00’, ‘2018-08-06 01:00:00’, ‘2018-08-06 02:00:00’,
‘2018-08-06 03:00:00’, ‘2018-08-13 01:00:00’, ‘2018-08-13 02:00:00’,
‘2018-08-13 03:00:00’, ‘2018-08-20 01:00:00’, ‘2018-08-20 02:00:00’,
‘2018-08-20 03:00:00’]}

问题

如何使用函数输出填充calendarydays字段,以便用户从下拉列表中进行选择,我应该在哪里实现此逻辑(在我的视图或序列化程序中)?我的主要困惑在于,因为我的函数依赖于来自trainer_availability_only的数据,所以我不想为这些信息创建单独的模型/表(因为这似乎过于重复).我也不完全了解在我的序列化程序或视图中我可以为用户选择单个日历值的某种下拉列表(例如我可以用于ForeignKey或OneToOneField).

除了trainer_availability_only之外,其他模型的详细信息与问题并不相关,它基本上为用户提供了如下所示的下拉选项:

('Monday','12:00 am - 1:00 am')
('Wednesday','4:00 pm - 5:00 pm')
etc.

任何帮助是极大的赞赏.

好吧,我对你的问题没有确切的答案,因为我不明白你想要做什么,但这就是我可以告诉你在模型上实现逻辑:

假设你有这个模型:

class MyModel(models.Model):
    field1=...
    field2=...

    def foo(self):
        ### Put your logic here ###
        self.field1 = self.field2 + 5

    def save(self, *args, **kwargs):
        self.foo()
        return super(MyModel, self).save(*args, **kwargs)

无论何时保存数据(或我假设更新),此方法都会运行.不要忘记在保存之前验证您的数据,不要将您的逻辑放在视图或序列化器上,这些都不是好主意.您也可以为您的逻辑创建另一个模块,但这更复杂!

相关文章
相关标签/搜索