当前位置: 首页 > 面试题库 >

Django ManyToMany模型验证

穆鸿波
2023-03-14
问题内容

我有一个模型与ManyToManyField类似(模型Word也有一种语言):

class Sentence(models.Model):
    words = models.ManyToManyField(Word)
    language = models.ForeignKey(Language)
    def clean(self):
        for word in self.words.all():
            if word.language_id != self.language_id:
                raise ValidationError('One of the words has a false language')

当尝试添加新句子时(例如通过django admin),我得到了'Sentence' instance needs to have a primary key value before a many-to-many relationship can be used。这意味着我在保存self.words之前无法访问它,但这正是我想要做的。有什么办法可以解决此问题,以便你仍然可以验证此模型?我真的很想直接验证模型的字段。

我发现了许多与此异常有关的问题,但找不到解决我的问题的帮助。我将不胜感激任何建议!


问题答案:

无法在模型的clean方法中进行此验证,但是你可以创建一个模型表单来验证的选择words

from django import forms

class SentenceForm(forms.ModelForm):
    class Meta:
        model = Sentence

    def clean(self):
        """
        Checks that all the words belong to the sentence's language.
        """
        words = self.cleaned_data.get('words')
        language = self.cleaned_data.get('language')
        if language and words:
            # only check the words if the language is valid
            for word in words:
                if words.language != language:
                    raise ValidationError("The word %s has a different language" % word)
        return self.cleaned_data

然后,你可以自定义Sentence模型管理员类,以在Django管理员中使用表单。

class SentenceAdmin(admin.ModelAdmin):
    form = SentenceForm

admin.register(Sentence, SentenceAdmin)


 类似资料:
  • Enforce模块用于验证数据。对于使用以前的验证器的用户,还可以继续使用,它们中的一部分整合到了enforce,剩余部分还没有。推荐你开始使用orm.enforce来取代orm.validators。可用的验证器的列表请见node-enforce。 unique验证器也构建于ORM中,可以这样来访问: name: orm.enforce.unique("name already taken!")

  • 这个问题已经被问了很多次了,即使是在经历了所有的解决方案之后,我也无法让hibernate validator工作。 控制器类:- servlet-上下文:- 依赖关系:- 验证类:- 我错过了什么?

  • 验证模型数据 需要在 Model 添加 Schema (模式 与 mongoose Schema 相同概念),确保数据库能够正确存储. 一个 Model 数据可以在它进入数据存储之前进行验证, 确保后端架构程序. 添加 schema 到 Model 使用验证方法 本地化验证消息(中文) 添加模式(schema) 到模型 验证数据的一种方法是创建一个模型模式(Model Schema), Loopb

  • 但是,我必须验证manager和operator的id是否有效,也就是说,我将验证user表中是否有匹配的id。 所以我想知道如何实现这种验证? 更新1:使用验证器

  • 我正在训练一个数据集,然后在其他数据集上测试它。

  • 我有一个相对大的数据: 超过37万个观测数据,分类因变量有250个水平,10个自变量包括数值变量和分类变量。 下面是我的代码: 有人告诉我包'CV tools'或'cert'可以预形成k-folds CV,但我仍然不能成功地执行这些包或函数。