Как я устанавливаю значение поля по умолчанию к значению другого поля в модели Django?

Если у меня есть следующая модель в 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.

8
задан Joel 13 August 2010 в 09:22
поделиться

1 ответ

Интересно, не лучше ли вам сделать это с помощью метода в вашей модели:

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
7
ответ дан 5 December 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: