我对管理员通用内联表单有个奇怪的问题。我有两个型号,主要项目和视频多对多关系槽录象,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,但没有找到答案。