在这种情况下,如何编写mixin以免重复代码

时间:2019-09-16 09:30:33

标签: django

Django == 2.2.5

在逻辑上将三个级别嵌套在另一个级别中。 这里的问题是保存方法中的重复代码。

您能帮助我创建一个混音而不重复自己吗?

class Level_1(PhraseMixin, ArchivedMixin, models.Model):

    def save(self, *args, **kwargs):

        """
        If this level is archived, then make all sublevels archived too.
        """
        if self.archived:
            level_2_set = self.level_2_set.all()
            for level_2_obj in level_2_set:
                level_2_obj.archived = True
                level_2_obj.save()

        super(Level_1, self).save(*args, **kwargs)



class Level_2(ArchivedMixin,
              PhraseMixin,
              ValidateParentMixin,
              models.Model):
    parent_level = models.ForeignKey(Level_1,
                                     verbose_name="Level 1",
                                     on_delete=models.CASCADE)
    def save(self, *args, **kwargs):
        """
        If this level is archived, then make all sublevels archived too.
        """


        if self.archived:
            level_3_set = self.level_3_set.all()
            for level_3_obj in level_3_set:
                level_3_obj.archived = True
                level_3_obj.save()

        super(Level_2, self).save(*args, **kwargs)    


class Level_3(PhraseMixin,
              ArchivedMixin,
              WhereMixin,
              ValidateParentMixin,
              models.Model):
    parent_level = models.ForeignKey(Level_2,
                                     verbose_name="Level 2",
                                     on_delete=models.CASCADE)

0 个答案:

没有答案