Я определил простую модель в 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.
Примечание: Я пытаюсь решить эту проверку без использования форм.
Как и в стороне - это обычная практика, чтобы использовать «я» в качестве первого аргумента к вашему методу - http://www.python.org/dev/peps/pep-0008/#function-and-method-arguments –
Спасибо, Айдан за это.На самом деле, мое намерение состоит в том, чтобы иметь действительный() независимый от Студента. Я импортирую его из отдельного модуля utils. Это был несчастный случай, когда я оставил его в определении Студента. Еще раз спасибо за то, что привлек мое внимание. – 2013-02-25 18:08:31
Я все еще не уверен, что это путь. Посмотрите мой обновленный ответ и, возможно, еще раз взгляните на документы проверки модели. –