Django自定义ManyToManyField验证

时间:2011-03-31 16:36:18

标签: django many-to-many validation manytomanyfield

我为模型创建了一个自定义的manytomany字段。保存此模型时 我想在m2m字段中运行验证器。

问题:未调用方法validate;就像在外国领域一样。

我想要完成的是,当保存模型时,我想比较一个值 从该模型到(即将成为)相关模型(我的FK字段执行该atm)。 我知道这可以在模型或模型中完成,但是从这种验证开始 在整个项目中,我希望在模型领域中保持一致 使用关系字段。

示例模型:

class Member(models.Model):
    ''' Stores mailinglist members. These are no django-system users. '''
    owner = models.ForeignKey(Owner)
    first_name = models.CharField(max_length=80, blank=True)
    last_name = models.CharField(max_length=80, blank=True)
    categories = CustomManyToManyField(Category)


class Category(models.Model):
    ''' Categories corresponding to a site and system user. '''
    owner = models.ForeignKey(Owner)
    name = models.CharField(max_length=80)

当我创建或更新成员并添加类别时,我想比较是否 member.owner == category.ownerCustomManyToManyField应该进行此验证。

不知何故,我必须覆盖保存/验证方法。

如果这是不可能的,我是否正确我可以创建一个自定义管理器来实现此目的 行为?我所要做的就是让我的经理成为默认经理。 (从来没有这样做过,但看起来似乎并不那么难)。

1 个答案:

答案 0 :(得分:0)

我不确定该模型是否能够识别它 - 它可以在您的类定义的约束内运行,但我认为需要实现一些更高级别的逻辑来执行您所建议的操作。

尝试在更新成员时添加类别中的定义,并添加在类别中传递的类别并相应地检查信息。例如在您的Member类中添加以下定义:

def compare_owner(self, category):
    if self.owner == category.owner :
        return true;
    else
        return false;

现在,当您在视图中时,可以从Member对象调用此定义。

member = Member(pk=2);
category = Category(pk=3);
if member.compare_owner(category) :
    //success;