我有一个操纵某些数据的课程
在那个课程中,我计算并验证数据
那么,有没有办法将这个计算和验证应用于Django模型的实例?
理想情况下,我想在数据库中存储导入类的实例。
我提出了两种方法。
哪个更好?
还有另一种好方法吗?
如果2是好的,该怎么办?
这是一个非常简单的例子。
# in models.py
class Person(models.Modes):
name = models.CharField()
gender = models.CharField()
age = models.IntegerField()
valid = models.NullBooleanField(blank=True)
# in other files
class AboutPerson:# I want to apply this class to above model instance.
def __init__(self, name, gender, age):
self.name =name
self.gender = gender
self.age = age
self.valed = None
def validate_age(self):
self.valid = self.age >= 20
def other_validate(self, age):
self.valid = self.age >= age
在这个例子中,我想自动将self.valid的更改应用于模型 现在,我采用2.这也是一个简单的例子。
class FromModel:
'''
obj:object obtained from database
This class passes the value received from the database to the class imported from the module.
Attribute:
'''
def __init__(self, obj):
self.obj = obj
self.instance = AboutPerson(name=obj.name, gender=obj.gender, age=obj.age)
def update(self):#use this method after some validation has done.
self.obj.valid = self.instance.valid
self.obj.save()
我希望你能理解我糟糕的解释...... 谢谢你的帮助。
答案 0 :(得分:1)
正如Alan Hoover所说,如果您不打算从用户输入验证表单数据,那么我认为您不应该使用表单。
我的建议是在模型中保持模型的验证。有一种内置的验证方法:Model.clean()。所以使用你的例子:
models.pyclass Person(models.Model):
name = models.CharField(max_length=64)
gender = models.CharField(max_length=16)
age = models.PositiveIntegerField()
def clean(self):
if self.age < 21:
raise ValidationError('No beer for you!')
if self.name == 'Charles':
self.name = 'Charley'
views.py
def my_function():
# ...
my_person_obj.clean()
my_person_obj.save()
如果我误解了你的问题,请告诉我。