【问题标题】:Django - saving one model during saving another modelDjango - 在保存另一个模型期间保存一个模型
【发布时间】:2020-05-18 10:22:04
【问题描述】:

创建现代假期后,我需要在模型表中创建记录。我有创建假期的员工,假期期间的每个日期都必须转到模型表。

    name = models.CharField('Name', max_length = 20) 
    last_name = models.CharField('Last name', max_length = 20) 

    def __str__(self):
        return self.last_name

class Vacation(models.Model):
    employee = models.ForeignKey(Employee, on_delete = models.SET_NULL, blank = True, null = True)
    vacation_type = models.ForeignKey(VacationType, on_delete = models.SET_NULL, blank = True, null = True)
    date_creation = models.DateTimeField(auto_now = True)
    start_date = models.DateField()
    end_date = models.DateField()
    duration = models.DurationField(default=timedelta)

class Tabel(models.Model):
    employee = models.ForeignKey(Employee, on_delete = models.SET_NULL, blank = True, null = True)
    date = models.DateField()
    day_type = models.ForeignKey(TabelType, on_delete = models.SET_NULL, blank = True, null = True)
    late_changes = models.BooleanField(default = False)

我只是从 Django 开始。在创建假期后我应该使用什么来更新模型表? 提前感谢您的任何建议!

【问题讨论】:

标签: python django django-models


【解决方案1】:

正如评论中提到的,您可以使用 Django post_save 信号:

models.py 或 signals.py

from django.db.models.signals import post_save

@receiver(post_save, sender=Vacation)
def create_tabel(sender, instance, created, **kwargs):
    if created:
        Tabel.objects.create(employee=instance.employee)

另一种选择是覆盖Vocation save 方法:

def save(self, *args, **kwargs):
    is_new = True if not self.id else False
    super(Book, self).save(*args, **kwargs)
    if is_new:
        Tabel.objects.create(employee=self.employee)

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2015-01-31
    • 2022-10-14
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多