我有两个字段name
和url
。 name
类似于“我的群组”,我希望url
字段自动从name
条目派生。所以它会像“my_group”。
这是我尝试完成此操作的方法,但它不起作用。
name = models.CharField(max_length=140)
url = models.CharField(max_length=140, default=name.replace (" ", "_"))
有什么想法吗?
答案 0 :(得分:3)
Override您的模型的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 :(得分:2)
1)您可以将url
转换为模型的@property:
name = models.CharField(max_length=140)
@property
def url(self):
return self.name.replace(" ", "_").lower()
2)或override the the model's save方法:
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 则保存到数据库中。实施适合您情况的更好。
答案 2 :(得分:1)
如果你正在使用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)