2009-06-02 22 views
0

我對管理員通用內聯表單有個奇怪的問題。我有兩個型號,主要項目和視頻多對多關係槽錄象,becouse我需要能夠不同數量的視頻投影和許多項目鏈接到視頻:在管理員通用內聯表單中創建新的通用相關對象的問題

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

我沒有表現出視頻模式這裏,但這對我的問題並不重要。

所有我需要的是通過兩種方式來定義鏈接到主對象(項目)新的相關對象(視頻鏈接):

    管理內嵌形式裏面
  • 選擇視頻(!這個作品非常好)
  • 在假video_url字段中定義新視頻的URL,創建新的Video對象並在主(Project)和新(Video)對象之間創建新的VideoLink對象。

對於第二種情況,我需要設置中間功能。它會處理新視頻的網址(如http://www.youtube.com/watch?v=WIXVzeB0DUo),創建新的視頻對象並將其與youtube.com同步。我認爲最好的辦法 - 把這個放到AdminVideoLink的表格乾淨的方法,我說得對嗎?

所以,我寫了這個代碼:

​​

但每節約的形式後,我看到管理在線表單中錯誤時間:用視頻對象附近選擇 - 「字段是必須的」(我的翻譯)。但是我在乾淨的方法中設置了這個字段。我檢查它:self.cleaned_data ['video']包含我剛創建的新的Video對象 並同步。

另一個很奇怪的問題是:我在這個清理方法裏面找不到父實例(主項目對象)。如果我用簡單的ManyToMany對象(沒有通用關係和泛型.GenericTabularInline表單)做同樣的事情,我可以在我的內聯表單中看到視頻和項目字段,但是在通用情況下,我沒有它。

我查過了相關的post,但沒有找到答案。

回答

0

解決這個問題很簡單,只需添加需要=假到在線表格:

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對象後手動。

相關問題