Django Admin中的关系

时间:2009-08-10 03:42:42

标签: django-models django-admin many-to-many

我对多对多的数据库关系感到困惑,所以有人可以澄清我将如何实现这一点吗?

我需要一个“标签”表(如标签中的单词)和一个“条目”表,这样许多“条目”可以对应许多标签词。

现在我的模特是这样的:

# 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()

现在我很困惑,我如何设置我的admin.py,以便在创建新条目时添加标签?

2 个答案:

答案 0 :(得分:3)

您需要的是使用模型的through功能:

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)

现在在您的管理员中使用该模型:

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

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

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

答案 1 :(得分:0)

您将需要以下内容:

# 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) 

(注意,此代码是在浏览器中编写的!)