Kri*_*adi 14 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()
Run Code Online (Sandbox Code Playgroud)
我试过了,__init__但它不起作用.我希望每次保存新记录时都使用小写的用户名.谢谢.
Avi*_*Raj 20
只需在save方法中执行.即,重写类的save方法Model.
def save(self, *args, **kwargs):
self.username = self.username.lower()
return super(User, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
Dan*_*nil 18
而覆盖save()方法是一种有效的解决方案.我发现在一个Field级别处理它是有用的,而不是Model通过覆盖get_prep_value()方法处理级别.
这样,如果您希望在不同的模型中重用此字段,则可以采用相同的一致策略.此外,逻辑与save方法分开,您可能还希望为不同目的覆盖该方法.
对于这种情况,你会这样做:
class NameField(models.CharField):
def __init__(self, *args, **kwargs):
super(NameField, 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7210 次 |
| 最近记录: |