【问题标题】:Auto increment the filed in Python Django model自动增加 P​​ython Django 模型中的文件
【发布时间】:2022-01-25 16:51:14
【问题描述】:

这是我的模特

class Department(BaseModel):
    name = models.CharField(max_length=20, null=False)
    maximum_number_of_employees = models.PositiveIntegerField(MinValueValidator(0), MaxValueValidator(3))
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE, null=False)

    def __str__(self):
        return self.name

我想在创建部门时自动增加 maximum_number_of_employees 字段以及员工的关联到每个部门,以便我可以验证 maximum_number_of_employees 不超过最大限制

【问题讨论】:

    标签: python python-3.x django django-models django-rest-framework


    【解决方案1】:

    像这样覆盖保存方法:

    class Department(BaseModel):
        name = models.CharField(max_length=20, null=False)
        maximum_number_of_employees = models.PositiveIntegerField(MinValueValidator(0), MaxValueValidator(3))
        employee = models.ForeignKey(Employee, on_delete=models.CASCADE, null=False)
    
        def save(self, *args, **kwargs):
             count_employee = Department.objects.select_related('employee').count()
             if  count_employee < MAX_LIMIT: 
                 self.maximum_number_of_employees = count_employee
                 super(Department).save(self, *args, **kwargs)
             else:
                 raise ValueError("Limit exceeded!")
    

    【讨论】:

    • TypeError:调用Department.objects.create() 时得到TypeError。这可能是因为您在序列化程序类上有一个可写字段,它不是Department.objects.create() 的有效参数。您可能需要将该字段设为只读,或重写 DepartmentSerializer.create() 方法以正确处理。
    • 如果控件达到覆盖保存方法,则进行调试。
    • 是的,但是它在 self.maximum_number_of_employees += 1 上抛出了一个错误,因为 maximum_number_of_employees 正在接收 None,我们不能将 +=1 添加到 None
    • 可能是我的序列化器有问题
    • 更新了代码检查。
    猜你喜欢
    • 2014-04-19
    • 2011-06-25
    • 2019-01-14
    • 2016-02-28
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多