django - 如何将默认字段值设置为 Django 模型中其他字段的值?

标签 django django-models

如果我在 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/

相关文章:

django.core.exceptions.ImproperlyConfigured : AUTH_USER_MODEL refers to model 'auth.User' that has not been installed

python - 测试 Django View 时模拟模块

Django:使用 Django 运行 Unix 命令?

python - Django 模型中的复杂级联

python - 有什么办法django不保存用表单上传的文件

python - "No module named simple"login_required 已贬值

python - 从 Django 1.6.7 升级到 1.8.3,RuntimeError : Conflicting models in application

python - 显示对象表 django

python - 在 Django 管理对象页面中显示对象 ID(主键)

Django:保存后pkey为none