Django模型 - 以小写形式设置默认字符串

时间:2016-03-31 10:22:41

标签: django django-models

如何设置小写的默认字符串? 这是我的模特:

class User(models.Model):
    username = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=64)
    name = models.CharField(max_length=200)
    phone = models.CharField(max_length=20)
    email = models.CharField(max_length=200)

    def __init__(self, *args, **kwargs):
        self.username = self.username.lower()

我尝试了__init__,但它不起作用。我希望每次保存新记录时都使用小写的用户名。感谢。

3 个答案:

答案 0 :(得分:17)

只需在save方法中执行此操作即可。即,覆盖mListView = (SwipeMenuListView)rootView.findViewById(R.id.transactionManageListView); //rootView is infalted view of fragment. 类的save方法。

Model

答案 1 :(得分:10)

虽然覆盖save()方法是有效的解决方案。我发现通过覆盖Field方法在Model级别处理此问题比处理get_prep_value()级别更有用。

这样,如果您希望在不同的模型中重复使用此字段,则可以采用相同的一致策略。此外,逻辑与save方法是分开的,您可能还想为不同的目的覆盖它。

对于这种情况,你会这样做:

class NameField(models.CharField):
    def __init__(self, *args, **kwargs):
        super(SnpField, self).__init__(*args, **kwargs)

    def get_prep_value(self, value):
        return str(value).lower()

class User(models.Model):
    username = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=64)
    name = NameField(max_length=200)
    phone = models.CharField(max_length=20)
    email = models.CharField(max_length=200)

答案 2 :(得分:0)

def save(self, force_insert=False, force_update=False):
        self.YourFildName = self.YourFildName.upper()
        super(YourFomrName, self).save(force_insert, force_update)