Django 관리자 ManyToMany 인라인 "has no ForeignKey to"오류


91

Django 관리자를 다음 모델에 설정하고 있습니다.

class Quote(models.Model):                                                  
    author = models.CharField(max_length=100)                               
    quote = models.CharField(max_length=1000)                               
    tags = models.ManyToManyField('Tag')                                    

class Tag(models.Model):                                                    
    name = models.CharField(max_length=100)                                 

다음 코드로 :

class TagInline(admin.TabularInline):                                                                                               
    model = Tag                                                             

class QuoteAdmin(admin.ModelAdmin):                                         
    list_display = ('author', 'quote')                                      
    inlines = (TagInline,)                                                  

class TagAdmin(admin.ModelAdmin):                                           
    pass                                                                    

admin.site.register(Quote, QuoteAdmin)                                      
admin.site.register(Tag, TagAdmin)

을 추가하기 위해 관리자 페이지를 보려고 할 때 Quote페이지에라는 오류가 표시 <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>됩니다. 인라인을 추가하기 전에는 이런 일이 발생하지 않았습니다. 뭐가 문제 야? 를 Tag인라인으로 올바르게 추가하려면 어떻게해야 합니까?

(나는 대답을 찾는 데 20 분을 보냈다. 비슷한 질문을 찾았지만 그 대답 중 어느 것도 나를 위해 일하지 않았다.)


답변:


152

관리 문서 에는 다 대다 관계 인라인 전용 섹션이 있습니다. 자체 대신에 Quote.tags.through대한 모델로 사용해야 합니다.TagInlineTag


많은 모달이 있다면 manytomany field그것은 각각에 대해 필요하고 Inline다른 것을 의미 합니까?
Sinux

4
@Rmatt의 경우는 다 대다 관계를 반전 model = Tag.quote_set.related.through
Manh 타이에게

DB에 가능한 행을 나열하는 대신 관통 모델을 원시 ID 필드로 표시하는 트릭이 있습니까?
mlissner

이것이 제가 Django를 사랑하기 시작한 이유입니다
Daniel W.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.