Django模型字段——从CharField的选项填充_
只是不想询问是否可以在CharField字段中使用populate_from选项从其他字段中预填充该字段,就像slug字段的示例一样Django模型字段——从CharField的选项填充_,django,django-models,Django,Django Models,只是不想询问是否可以在CharField字段中使用populate_from选项从其他字段中预填充该字段,就像slug字段的示例一样 class Post(models.Model): ***name***= models.CharField(max_length=50) slug = extension_fields.AutoSlugField(populate_from='***name***', blank=True) created = models.DateTi
class Post(models.Model):
***name***= models.CharField(max_length=50)
slug = extension_fields.AutoSlugField(populate_from='***name***', blank=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
比方说
class Employee(models.Model):
eid= models.CharField(primary_key = True)
lastname = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, null=True)
现在我不想添加一个新的CharField全名。我不想从lastname、firstname和middlename字段填充全名
fullname = models.CharField(populate_from = "***i don't know what to do here***")
请帮助…您可以在
员工
模型的保存方法中执行此操作
def save(self, *args, **kwargs):
self.fullname = '{0} {1} {2}'.format(self.firstname, self.middlename, self.lastname)
super(Employee, self).save(*args, **kwargs)
为此,您可能必须将
fullname
字段保留为可选字段。否则,您可能会在表单中遇到错误。这可能是一个解决方案,无需从
class Employee(models.Model):
eid= models.CharField(primary_key = True)
lastname = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, null=True)
fullname = models.CharField(max_length=50)
def save(self):
self.fullname = "%s %s %s" % (lastname, firstname, middlename)
super(Employee, self).save()
class Employee(models.Model):
eid= models.CharField(primary_key = True)
lastname = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, null=True)
fullname = AutoSlugField(populate_from=lambda instance: instance.employee.get_full_name())
def get_full_name(self):
fullname = "%s %s %s" % (lastname, firstname, middlename)
return fullname
或使用和从中填充
class Employee(models.Model):
eid= models.CharField(primary_key = True)
lastname = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, null=True)
fullname = models.CharField(max_length=50)
def save(self):
self.fullname = "%s %s %s" % (lastname, firstname, middlename)
super(Employee, self).save()
class Employee(models.Model):
eid= models.CharField(primary_key = True)
lastname = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, null=True)
fullname = AutoSlugField(populate_from=lambda instance: instance.employee.get_full_name())
def get_full_name(self):
fullname = "%s %s %s" % (lastname, firstname, middlename)
return fullname
这里有一个不需要覆盖
save
功能的选项:
class Employee(models.Model):
def get_fullname(self):
return '{} {} {}'.format(self.lastname, self.firstname, self.middlename)
eid= models.CharField(primary_key = True)
lastname = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
middlename = models.CharField(max_length=50, null=True)
fullname = property(get_fullname)
如果您不需要将
fullname
与lastname
、firstname
和middlename
分开编辑,则此选项非常有用,因为它不会在admin中显示为字段,而是将结果存储在数据库中,调用时获取值感谢回复人,我将尝试此操作以及其他答案。所以我有多个选项可以使用..django rest可以吗?如果我编辑lastname,全名将自动修改?是的。我刚刚编辑了我的答案,因为这种方式fullname
实际上并没有存储在数据库中,而是在需要时获取它的值。使用DRF也可以,因为fullname
充当常规字段。感谢回复人..对不起,我不能投票给你的答案。声誉不够..:D