我将在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)
答案 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()
此代码未经测试,只是为了说明您可能希望实现目标的两个地方