【问题标题】:Django: Auto Generate a CharField using data from another CharFieldDjango:使用来自另一个 CharField 的数据自动生成 CharField
【发布时间】:2014-06-18 01:13:46
【问题描述】:

我有两个字符域,nameurlname 类似于“我的组”,我希望 url 字段自动派生自 name 条目。所以它会类似于“my_group”。

这是我尝试完成此操作的方法,但它不起作用。

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

有什么想法吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    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())。

    【讨论】:

      【解决方案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)
      

      两者的区别在于1url不保存到数据库中,而2中是。实施更适合您的情况。

      【讨论】:

        【解决方案3】:

        如果你使用的是 django admin,你可以直接 slugify。

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

        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-15
          • 2019-05-26
          • 1970-01-01
          • 2021-07-06
          • 2015-03-24
          • 2019-03-21
          • 2015-11-20
          相关资源
          最近更新 更多