2009-06-02 8 views
0

adminジェネリックインラインフォームに奇妙な問題があります。私はビデオにプロジェクトと多くのプロジェクトへのビデオの別の番号をリンクできるようにする必要がありbecouse私は、多対多の関係トラフVideoLinkで二つのモデルは、メインプロジェクトとビデオを持っている:admin一般ジェネリックインラインフォーム内に新しいジェネリック関連オブジェクトを作成する問題

class VideoLink(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
    video = models.ForeignKey(Video) 

class Project(models.Model): 
    name = models.CharField(max_length=50) 
    image_set = generic.GenericRelation('Image') 

私はビデオのモデルを示しませんでしたここでは、私の質問には重要ではありません。

私は必要なものすべてが、2通りの方法で主要被写体(プロジェクト)にリンクされている新たな関連オブジェクト(VideoLink)を定義することです:

  • 選択ビデオ管理インラインフォームの内側(これは非常にうまく機能!)
  • 偽のvideo_urlフィールドに新しいビデオのURLを定義し、新しいVideoオブジェクトを作成し、メイン(プロジェクト)オブジェクトと新しい(ビデオ)オブジェクトの間に新しいVideoLinkオブジェクトを作成します。

中間の機能を設定する必要があります。新しい動画のURL(http://www.youtube.com/watch?v=WIXVzeB0DUoなど)を処理し、新しいVideoオブジェクトを作成してyoutube.comと同期します。私は最良の方法だと思う - これをAdminVideoLinkのフォームに入れようクリーンメソッド、そうですか?

だから、私はこのコードを書いた:

​​

しかし、フォームの保存後に毎回、私は管理者のインラインフォーム内のエラーを参照してください。近くにビデオオブジェクトを選択 - 「フィールドが必要とされる」(私訳)。しかし、私はこのフィールドを私のきれいな方法の中に置いた。私はそれをチェックします:self.cleaned_data ['video']はちょうど で作成された新しいビデオオブジェクトを含んでいます。

もう1つの非常に奇妙な問題:こののクリーンメソッドの中に親インスタンス(メインプロジェクトオブジェクト)が見つかりません。単純なManyToManyオブジェクト(genericリレーションおよびgeneric.GenericTabularInlineフォームなし)で同じことを行うと、インラインフォーム内にビデオフィールドとプロジェクトフィールドの両方が表示されますが、一般的なケースでは私はそれを持っていません。

関連性を確認しました。postですが、回答が見つかりませんでした。

答えて

0

だけインラインフォームに必要= Falseのを追加し、非常にシンプルなこの問題を解決:それで

class VideoForm(forms.ModelForm): 

    video_url = forms.CharField(required=False, widget=AdminVideoPreviewWidget()) 

    def __init__(self, *args, **kwargs): 
     super(VideoForm, self).__init__(*args, **kwargs) 
     self.fields['video'].required = False 

    .... 

私は、新しいVideoオブジェクトを作成し、syncronizing後に手動でビデオフィールドを埋めることができます。