2013-06-05 1 views
3

GenericInlineModelAdmin 양식에서 저장 한 일반 관계 객체의 유효성을 검사하려고합니다.Django GenericInlineModelAdmin에서 일반 관계 유효성 검사

개체를 만들 때 object_idcontent_typeNone으로 설정되어 있으며 관련 개체에는 액세스 할 수 없지만 개체가 업데이트되면 올바르게 설정됩니다.

models.py에서 :

class Article(models.Model): 
    title = models.CharField(max_length=32) 
    body = models.TextField() 

class TaggedItem(models.Model): 
    tag = models.SlugField() 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    def clean(self, exclude=None): 
     pass 

admin.py에서 :

class InlineTags(generic.GenericTabularInline): 
    model = TaggedItem 

class ArticleAdmin(admin.ModelAdmin): 
    inlines = [InlineTags] 

admin.site.register(Article, ArticleAdmin) 

당신이 TaggedItem.clean() 방법 self.object_idself.content_type에 태그를 추가하면 None로 설정되어 여기

샘플 코드입니다 . 태그가 편집중인 경우 올바르게 설정됩니다.

나는 이것을 django 1.4.x와 1.5.x에서 모두 시도했다.

답변

0

이것이 장고 (문제 #19255)의 해결되지 않은 버그 인 것 같습니다.

나는 그것을 테스트하기 위해 아직,하지만 당신은 관리자의 태그를 저장하고 있기 때문에 그렇게 같은 사용자 정의 ModelForm 추가하여이 문제를 해결할 수 있습니다 :

class InlineTagsForm(forms.ModelForm): 
    def clean(self): 
     """ Validate object_id & content_type fields """ 
     assert self.cleaned_data.get('object_id') 
     assert self.cleaned_data.get('content_type') 
     return self.cleaned_data 


class InlineTags(generic.GenericTabularInline): 
    model = TaggedItem 
    form = InlineTagsForm