我在 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.
我正在编写有效的函数,我想执行评论中详述的命令。
对于(1),我使用
if k not in s.__dict__: return False
我需要一些帮助(2)。
也就是说,如何检查值是否符合为属性(Django 模型字段)定义的格式?
例如:valid(s_name=True) 和 valid(s_name=33*'a') 都应该返回 False。
注意:我正在尝试在不使用 Forms 的情况下解决此验证问题。