如何在Django admin的"prepopulated_fields"中区分大小写字母?
我打算在Django的后台管理中使用'prepopulated_fields',通过视频ID获取YouTube的嵌入代码,像下面这样。
class VideoAdmin(admin.ModelAdmin):
prepopulated_fields = {"embed_code": ("embed_id",)}
inlines = (CourseVideoInline,)
但是我从"Rmp6zIr5y4U"这个视频ID得到的嵌入代码是"rmp6zir5y4u",所有的大写字母都变成了小写。
有没有什么办法可以解决这个问题?
或者有没有更好的方法可以通过自定义Django后台来从视频ID获取嵌入代码?
谢谢!
视频模型(相关字段)如下。
class Video(models.Model):
embed_code = models.TextField(max_length=1000)
embed_id = models.CharField(max_length=200)
1 个回答
1
prepopulated_fields
主要是用来通过 JavaScript 从标题生成短链接的,所以你看到它是小写的。你可以考虑重写模型的保存函数,这样在保存模型实例的时候,就可以获取到 video_id 并生成嵌入代码:
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)
另一种方法是在管理界面层面上处理这个问题(而不是在模型层面)。你可以通过重写 save_model
方法 来实现,这样你就可以访问请求和表单了:
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()
这段代码没有经过测试,只是用来说明你可能想要实现的两个地方。