【问题标题】:Model.objects.create equivalent that performs a full_clean?执行 full_clean 的 Model.objects.create 等效项?
【发布时间】:2014-03-23 05:45:37
【问题描述】:

所以我得到了以下代码:

class MyModel(models.Model):
    # Text language.                                                                                 
    ENGLISH = 'eng'                                                                                   
    FRENCH  = 'fr'                                                                                   

    LANGUAGES_CHOICES = [                                                                            
        (ENGLISH, 'English'),                                                                        
        (FRENCH, 'French'),                                                                          
    ]                                                                                                

    language = models.CharField(                                                                     
            max_length=max(len(language) for language in LANGUAGES_CHOICES),                         
            choices=LANGUAGES_CHOICES,                                                               
            blank=False,                                                                             
            null=True)

当我执行MyModel(language='invalid').save()MyModel.objects.create(language='invalid') 时,模型会毫无怨言地保存。是否有任何与Model.objects.create 等效的便捷方法在保存之前执行full_clean

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    如果您使用的是模型表单,full_clean 将作为表单验证步骤的一部分被调用。

    一般来说,没有调用full_clean 的便捷方法,但您可以自己编写。

    【讨论】:

      【解决方案2】:

      Model.clean():此方法应该用于提供自定义模型验证,并在需要时修改模型上的属性。例如,您可以使用它来自动为字段提供值,或者进行需要访问多个字段的验证:

      【讨论】:

      • "...但是请注意,与 Model.full_clean() 一样,调用模型的 save() 方法时不会调用模型的 clean() 方法。"
      猜你喜欢
      • 2014-10-11
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 2013-06-13
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      相关资源
      最近更新 更多