Если у меня есть следующая модель в django;
class MyModel(models.Model):
name = models.CharField(max_length=50)
fullname = models.CharField(max_length=100,default=name)
Как я делаю fullname полевое значение по умолчанию для именования? Поскольку это прямо сейчас, fullname значения по умолчанию к строковому представлению имени CharField.
Пример:
new MyModel(name='joel')
привел бы к 'joel' и как к имени и как fullname, тогда как
new MyModel(name='joel',fullname='joel karlsson')
привел бы к другому имени и fullname.
Интересно, не лучше ли вам сделать это с помощью метода в вашей модели:
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
метод на вашей форме (или вашей модели, если вы используете новомодную валидацию модели (доступную с 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