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.