2009-08-10 10 views
1

Je suis vraiment confus avec les relations de base de données many-to-many, alors quelqu'un peut-il clarifier comment j'y arriverais?Relations dans Django Admin

J'ai besoin d'une table de "Tags" (comme dans les mots tag) et une table pour "Entrées", tels que de nombreux "Entrées" pourraient correspondre à de nombreux mots Tag.

En ce moment j'ai mes modèles comme ceci:

# models.py 
class Tags(models.Model): 
    tag   = models.CharField(max_length=255) 
    entry  = models.ManyToManyField(Entry) 

class Entry(models.Model): 
    entry  = models.CharField(max_length=255) 
    description = models.TextField() 

Maintenant, je suis confus, comment pourrais-je configurer mon admin.py pour que je puisse ensuite ajouter des balises lorsque je crée une nouvelle entrée?

Répondre

3

Ce que vous avez besoin est d'utiliser la fonction through des modèles:

class Tag(models.Model): 
    tag   = models.CharField(max_length=255) 
    entry  = models.ManyToManyField(Entry, through='TaggedEntries') 

class Entry(models.Model): 
    entry  = models.CharField(max_length=255) 
    description = models.TextField() 

class TaggedEntries(models.Model): 
    entry = models.ForeignKey(Entry) 
    tag = models.ForeignKey(Tag) 

et maintenant utiliser ce modèle dans votre admin:

class TagsInline(admin.TabularInline): 
    model = TaggedEntries 
    extra = 1 

class EntryAdmin(admin.ModelAdmin): 
    inlines = (TagsInline,) 

admin.site.register(Entry, EntryAdmin) 
admin.site.register(Tag) 
0

Vous aurez besoin quelque chose le long des lignes de:

# admin.py 

from django.contrib import admin 
from models import * 

class TagsInline(admin.TabularInline): 
    model = Tag 
    extra = 1 

class EntryAdmin(admin.ModelAdmin): 
    inlines = (TagsInline,) 

admin.site.register(Entry, EntryAdmin) 
admin.site.register(Tag) 

(Notez, ce code a été écrit dans un navigateur!)

+0

c'est ce que j'avais en fait, et j'ai continué à obtenir: Exception: n'a pas ForeignKey pour KeyboardInterrupt

Questions connexes