У меня странная проблема с встроенными формами admin admin. У меня есть две моделей, основной проект и видео с ManyToMany отношения корыта VideoLINK, becouse мне нужно, чтобы иметь возможность увязки различного количества видео для Project и многий проекта Видео:Проблема создания нового родового связанного объекта внутри администратора общие встроенные формы
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')
Я не показывать видео модели здесь, но это не важно для моего вопроса.
Все, что мне нужно, чтобы определить новый связанный объект (VideoLINK), связанный с основным объектом (Project) в 2-х направлениях:
- выберите Видео в админ инлайн форм (! Это работает очень хорошо)
- определить URL нового видео в поддельном поле video_url, создать новый объект Video и создать новый объект VideoLink между основными (Project) и новыми (Video) объектами.
Для второго случая мне нужно установить среднюю функциональность. Он обработает URL нового видео (например, http://www.youtube.com/watch?v=WIXVzeB0DUo), создаст новый объект Video и синхронизирует его с youtube.com. Я думаю, что лучший способ - поместить это в форму AdminVideoLink чистый метод, я прав?
Итак, я написал этот код:
class VideoForm(forms.ModelForm):
# new field for absolute video urls
video_url = forms.CharField()
def clean(self):
cleaned_data = self.cleaned_data
if not cleaned_data.get('id') and not cleaned_data.get('video') and cleaned_data.get('video_url'):
... some extra functionality:
1) get id from video_url
2) create new Video object with id
3) define cleaned_data['video'] = <Video object>
....
return cleaned_data
class VideoInline(generic.GenericTabularInline):
model = VideoLink
form = VideoForm
class ProjectAdmin(admin.ModelAdmin):
inlines = [VideoInline]
Но каждый раз после сохранения формы, я вижу ошибку в админ инлайн формы: рядом с выбора видео объектов - «поле обязательно» (мой перевод). Но я установил это поле внутри моего чистого метода. Я проверяю: self.cleaned_data ['video'] содержит мой новый объект Video только что созданный и синхронизированный.
И еще одна очень странная проблема: я не могу найти родительский экземпляр (основной объект проекта) внутри этого чистый метод. Если я делаю то же самое с простыми объектами ManyToMany (без общих отношений и generic.GenericTabularInline форм), я вижу как поля видео, так и проекта внутри моей встроенной формы, но в общем случае у меня этого нет.
Я проверил связанные post, но не нашел ответа.