如何在使用Django admin“prepopulated_fields”时区分大小写字母?

时间:2012-01-29 10:22:52

标签: python django admin

我将在Django管理员处使用'prepopulated_fields'从其视频ID中获取YouTube嵌入代码,如下所示。

class VideoAdmin(admin.ModelAdmin):
prepopulated_fields = {"embed_code": ("embed_id",)}
inlines = (CourseVideoInline,)

但是我可以从“Rmp6zIr5y4U”获得的embed_code是“rmp6zir5y4u”,所有大写字母都变成了小写字母。

有任何想法可以解决这个问题吗?或者是通过自定义Django管理员来获取嵌入代码的更好方法吗?

谢谢! 视频模型(相关领域)如下。

class Video(models.Model):    
  embed_code = models.TextField(max_length=1000)
  embed_id = models.CharField(max_length=200)

1 个答案:

答案 0 :(得分:1)

prepopulated_fields主要用于通过javascript从标题生成slu - - 因此为什么你用小写看到它。你可能最好覆盖the models save function,以便在保存模型实例时,它可以获取video_id并生成embed_code:

class MyModel(models.Model):
     video_id = ...
     embed_code = ...

     def save(self, *args, **kwargs):
         # If we have enetered a video id, but there is not saved embed code, generate it
         if not self.embed_code and self.video_id:
             self.embed_code = "http://youtube.com/%s" % self.video_id
         super(MyModel, self).save(*args, **kwargs)

另一种方法是在管理视图级别(与模型级别相反)执行此操作。您可以通过ModelAdmin课程的overwriting the save_model method执行此操作。这为您提供了访问请求和表单的额外好处:

class MyModelAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        video_id = forms.cleaned_data.get('video_id', None)
        # If we are creating the object, and the video id is present
        if video_id and not change:
            obj.embed_code = video_id
        obj.save()

此代码未经测试,只是为了说明您可能希望实现目标的两个地方