2012-01-29 7 views
0

次のように、Djangoの管理者で 'prepopulated_fields'を使用して動画IDからYouTube埋め込みコードを取得します。私は「Rmp6zIr5y4U」から取得することができますDjangoのadmin "prepopulated_fields"を使って大文字と小文字を区別する方法は?

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

しかしembed_codeは「rmp6zir5y4u」で、すべて大文字は小さなものに変更しました。

これを解決するためのアイデアがありますか?
またはDjango管理者をカスタマイズしてビデオIDからコードを埋め込むには、より良い方法ですか?

ありがとうございます! ビデオモデル(関連フィールド)は次のとおりです。

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

ポストを行うために探しているものを達成することがあります二つの場所を示すためにですあなたのモデルをしてください。 – marue

答えて

1

prepopulated_fieldsは、主にJavaScriptでのタイトルからナメクジを生成するために使用されている - あなたは小文字でそれを見るので、なぜ。お使いのモデルのインスタンスを保存するとき、それはVIDEO_IDをつかむとembed_codeを生成できるように、the models save functionを上書きしたほうが良いかもしれません:

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

このコードはテストされていない、それはちょうどあなたが

+0

ありがとう!私はモデル保存機能を使うべきだと思った。あなたのコードは本当に大きな助けになります。私が試してみます。 –

関連する問題