在Django中如何为变量设置默认值并存储至数据库?
问题1:固定值department存入数据库的实现方法
你原来的写法不会把department存入数据库,因为Django只会把继承自models.Field的类属性映射为数据库表字段,直接定义的普通类属性不会参与数据库读写。
正确实现代码如下:
from django.db import models # Django模型类惯例使用大驼峰命名,你也可以保留原来的attempt命名不影响功能 class Attempt(models.Model): name = models.TextField(max_length=200) # 设置default为固定值,editable=False表示不需要在表单等场景展示编辑 department = models.CharField(max_length=100, default="Software Development", editable=False)
按上述定义创建实例时,只需要传入name参数,department会自动填充固定值存入数据库,最终存储格式完全符合你的要求。
问题2:你提供的第二种写法不可行,原因如下
- 方法定义错误:模型的实例方法第一个参数必须是实例本身
self,你写的function1(str)里的str实际接收的是模型实例,不是name字段的值 - 取值时机错误:你在类定义层面直接执行
x = function1(name),此时类还没实例化,拿到的name是模型字段对象,不是用户输入的实例name值,最终default拿到的是无效的拼接结果 - 语法错误:
CharField的首字母F需要大写,小写Charfield会直接触发属性不存在的报错
如果要实现department为name拼接固定后缀的需求,推荐重写模型的save方法实现,代码示例:
from django.db import models class Attempt(models.Model): name = models.TextField(max_length=200) department = models.CharField(max_length=100, editable=False) def save(self, *args, **kwargs): # 仅首次保存时赋值,避免后续修改name时更新department if not self.pk: self.department = f"{self.name} Hello World" super().save(*args, **kwargs)
内容的提问来源于stack exchange,提问作者Tharun Teja
相关产品推荐
相关产品推荐

