【发布时间】:2013-02-25 17:40:29
【问题描述】:
我在 Django 中定义了一个简单的模型:
class Student(models.Model):
s_name = models.CharField(max_length=32)
s_gpa = models.FloatField(min=0.0, max=5.0, default=5.0)
s_year = models.IntegerField(min=1, max=10, default=1)
s_registered = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.username
def modify(self, **kwargs):
if valid(self, kwargs):
for k,v in kwargs.iteritems():
setattr(self, k, v)
self.save()
def valid(s, kwargs):
# For all k,v pairs in kwargs
# (1) Checks if k is one of the attributes of s. Returns False if fails.
# (2) Checks if v fits the format defined for attribute k of s.
# Returns False if fails.
# Returns True if reaches this point.
我正在编写函数 valid,我想执行 cmets 中详述的命令。
对于 (1),我使用
if k not in s.__dict__: return False
我需要一些关于 (2) 的帮助。
也就是说,如何检查值是否符合为属性(Django 模型字段)定义的格式?
例如:valid(s_name=True) 和 valid(s_name=33*'a') 都应该返回 False。
注意:我正在尝试在不使用表单的情况下解决此验证问题。
【问题讨论】:
-
顺便说一句 - 使用 'self' 作为方法的第一个参数是常见的做法 - python.org/dev/peps/pep-0008/#function-and-method-arguments
-
感谢 Aidan 指出这一点。实际上,我的意图是让 valid() 独立于 Student。我从一个单独的 utils 模块导入它。我把它留在学生的定义中是一个意外。再次感谢您引起我的注意。
-
我仍然不相信这是要走的路。看看我更新的答案,也许再看看模型验证文档。
标签: python django django-models python-2.7