【问题标题】:How to insert values into related models?如何将值插入相关模型?
【发布时间】:2020-03-06 17:28:13
【问题描述】:

我有两个模型如下:

class Reservation(models.Model):
    startDate = models.DateField()
    endDate = models.DateField()
    count = models.IntegerField(blank=False, null=False)

    def generateReservationItems(self):
        for d in range((endDate - startDate).days):
           reservationItem= ReservationItems(reservationDate=d, count = count)
           reservationItem.save()

class ReservationItems(models.Model):
    reservationDate = models.DateField();
    reservation = models.ForeignKey(Reservation, on_delete=models.CASCADE)
    count = models.IntegerField(blank=False, null=False)

Reservation 类表示日期包(日期范围),ReservationItems 类存储每个单独的日期存在于 Reservation 类中。
我构建了“generateReservationItems()”函数,以便在保存 Reservation 对象时自动调用。该函数插入的项目数等于 startDate 和 endDate 之间的差值。例如:如果 startDate = Mars 6 2020,endDate = Mars 10 2020,则在 ReservationItems 中插入 5 个项目:

Mars 6 2020
Mars 7 2020
Mars 8 2020
Mars 9 2020
Mars 10 2020

但是 Reservation 对象被成功插入,而没有将项目插入到 reservationItems 中。我不知道如何在创建预留对象后调用“generateReservationItems()”。 请有任何想法,或者是否有其他有效的方法来执行此类任务。

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    post_save 信号是你的朋友: https://docs.djangoproject.com/en/3.0/ref/signals/#post-save

    from django.db.models.signals import post_save
    
    
    class Reservation(models.Model):
        ...
    
    
    @receiver(post_save, sender=Reservation, created=True)
    def invokeGenerateReservationItems(sender, instance, **kwargs):
        instance.generateReservationItems()
    

    【讨论】:

    • 非常感谢您的宝贵回复。现在我得到这个错误: NameError: name 'Reservation' is not defined'
    • 效果很好。我刚刚在 Reservation 之前添加了 App 名称:AppName.Reservation。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多