Адміністратор Django ManyToMany вбудована помилка "не має 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)

При спробі переглянути сторінку адміністратора, щоб додати a Quote, на сторінці відображається повідомлення про помилку <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>. Це не сталося до того, як я додав рядок. В чому проблема? Як правильно додати a Tagяк вбудований?

(Я витратив добрі 20 хвилин на пошук відповіді; я знайшов подібні запитання, але жодна з їхніх відповідей не спрацювала мені).


Відповіді:


152

Документація адміністратора має розділ, присвячений вбудовуванню відносин багато-до-багатьох. Ви повинні використовувати Quote.tags.throughяк модель для себе TagInline, а не для Tagсебе.


Якщо у мене є спосіб, який має багато manytomany field, це означає, що для кожного він потрібен, Inlineі вони різні?
Sinux

4
@Rmatt За зворотні відносини багато-до-багатьох model = Tag.quote_set.related.through
Мань Тай

Чи є хитрість, щоб наскрізна модель відображалася як необроблене поле ідентифікатора, замість того, щоб перерахувати дуже можливий рядок у БД?
mlissner

і саме тому я починаю любити Джанго
Даніель В.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.