【发布时间】:2021-01-22 12:32:48
【问题描述】:
编辑-更新的models.py models.py:
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
class Department(models.Model):
departmentName = models.CharField(max_length=100)
def __str__(self):
return self.departmentName
class Designation(models.Model):
designationName = models.CharField(max_length=100, null=True)
def __str__(self):
return self.designationName
class Employee(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(unique=True, blank=False)
department = models.ManyToManyField(Department, blank=True)
designation = models.ForeignKey(Designation, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.name
def departments(self):
return ",".join([d.departmentName for d in self.department.all()])
#Using post receiver signal as suggested by @Daniel in answer and comments
@receiver(post_save, sender=Employee, dispatch_uid='set_department')
def SetDefaultDeparment(**kwargs):
employee = kwargs['instance']
if not employee.department.all():
resource_pool = Department.objects.get(departmentName="RP")
employee.department.add(resource_pool)
employee.save()
我的查询/要求: 员工和部门通过 M2M 链接。我设置 blank=True 来克服没有选择部门的表单验证。 (null=True 似乎不适用于 M2M)
比方说,
场景一:在新建 Emp 时,如果没有提供部门,则默认设置为 RP(Resource pool)。
场景 2: 现有 Emp 来自 HR 部门;假设由于某种原因 HR 部门被删除或 Emp 被踢出,现在 Emp 没有与之关联的部门,它应该默认移动到 RP(资源池)!
如何在 Django 中安排默认的部门-RP 以使两个场景都通过!?
提前致谢:)
应酬
【问题讨论】:
标签: python django django-models default-value manytomanyfield