如果我在 Django 中有以下模型;
class MyModel(models.Model):
name = models.CharField(max_length=50)
fullname = models.CharField(max_length=100,default=name)
如何使全名字段默认为名称?就像现在一样,全名默认为名称 CharField 的字符串表示形式。
示例:
new MyModel(name='joel')
将产生 'joel' 作为名字和全名,而
new MyModel(name='joel',fullname='joel karlsson')
会产生不同的名字和全名。
最佳答案
我想知道您是否最好通过模型上的方法来执行此操作:
class MyModel(models.Model):
name = models.CharField(max_length=50)
fullname = models.CharField(max_length=100)
def display_name(self):
if self.fullname:
return self.fullname
return self.name
也许,而不是
display_name
这应该是您的 __unicode__
方法。如果你真的想做你所要求的,那么你不能使用
default
来做到这一点。 - 使用 clean
方法代替您的表单(或您的模型,如果您使用的是新奇的 model validation(自 Django 1.2 起可用)。像这样(用于模型验证):
class MyModel(models.Model):
name = models.CharField(max_length=50)
fullname = models.CharField(max_length=100,default=name)
def clean(self):
self.fullname=name
或者像这样(用于表单验证):
class MyModelForm(ModelForm):
class Meta:
model = MyModel
def clean(self):
cleaned_data = self.cleaned_data
cleaned_data['fullname'] = cleaned_data['name']
return cleaned_data
关于django - 如何将默认字段值设置为 Django 模型中其他字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3475504/