在Django中将模型视为导入类的实例

时间:2018-02-14 00:54:42

标签: python django

我有一个操纵某些数据的课程 在那个课程中,我计算并验证数据 那么,有没有办法将这个计算和验证应用于Django模型的实例?
理想情况下,我想在数据库中存储导入类的实例。 我提出了两种方法。

  • 1.创建另一个类来连接模型和导入的类。
  • 2.直接在models.py中编写验证和计算。

哪个更好? 还有另一种好方法吗? 如果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()

我希望你能理解我糟糕的解释...... 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

正如Alan Hoover所说,如果您不打算从用户输入验证表单数据,那么我认为您不应该使用表单。

我的建议是在模型中保持模型的验证。有一种内置的验证方法:Model.clean()。所以使用你的例子:

models.py
class 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()

如果我误解了你的问题,请告诉我。