繁体   English   中英

Django:使用来自另一个CharField的数据自动生成CharField

[英]Django: Auto Generate a CharField using data from another CharField

我有两个charfields, nameurl name就像“我的组”,我希望url字段自动从name条目派生。 所以它会像“my_group”。

这就是我试图实现这一目标的方法,但它不起作用。

name = models.CharField(max_length=140)
url = models.CharField(max_length=140, default=name.replace (" ", "_"))

有任何想法吗?

覆盖模型的save()方法并在其中设置url字段值:

class MyModel(models.Model):
    name = models.CharField(max_length=140)
    url = models.CharField(max_length=140)

    def save(self, *args, **kwargs):
        self.url = self.name.replace(' ', '_').lower()
        super(MyModel, self).save(*args, **kwargs)

也可以看看:

另请注意,拥有一个只是模型另一个字段的逻辑转换的字段基本上表明您正在做错事。 考虑在模型上使用property或自定义方法(例如get_url() )。

1)您可以将url转换为模型的@property

name = models.CharField(max_length=140)

@property
def url(self):
    return self.name.replace(" ", "_").lower()

2)覆盖模型的保存方法:

name = models.CharField(max_length=140)
url = models.CharField(max_length=140)

def save(self, *args, **kwargs):
    self.url = self.name.replace(" ", "_").lower()
    super(ModelName, self).save(*args, **kwargs)

两者之间的区别在于, 1中url不会保存到数据库中,而在2中则是。 根据您的情况更好地实施。

如果你正在使用django admin,你可以将它搞砸。

在您的模型中,您将拥有:

name = models.CharField(max_length=140)
slug = models.CharField()

然后在admin.py中:

class YourModelAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("name",)}

admin.site.register(YourModel, YourModelAdmin)

请参阅https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields了解更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM