我对多对多的数据库关系感到困惑,所以有人可以澄清我将如何实现这一点吗?
我需要一个“标签”表(如标签中的单词)和一个“条目”表,这样许多“条目”可以对应许多标签词。
现在我的模特是这样的:
# 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,以便在创建新条目时添加标签?
答案 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)
(注意,此代码是在浏览器中编写的!)