簡體   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