Django管理中的关系 [英] Relationships in Django Admin
本文介绍了Django管理中的关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要一个表 (如标签字)和Entries表,如许多条目可能对应于许多标签词。
现在我有我的模型,这个:
#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()
现在我很困惑,我如何设置我的管理员.py我可以在创建新条目时添加标签?
解决方案
您需要的是使用通过
模型功能:
class Tag(models.Model):
tag = models.CharField(max_length = 255)
entry = models.ManyToManyField(Entry,through ='TaggedEntries')
类条目(models.Model):
entry = models.CharField(max_length = 255)
description = models.TextField()
class TaggedEntries(models.Model):
entry = models.ForeignKey(Entry)
tag = models.ForeignKey )
现在在您的管理员中使用该模型:
class TagsInline(admin.TabularInline):
model = TaggedEntries
extra = 1
类EntryAdmin(admin.ModelAdmin) :
inlines =(TagsInline,)
admin.site.register(Entry,EntryAdmin)
admin.site.register(Tag)
I get really confused with many-to-many database relationships, so can some one please clarify how I would achieve this?
I need a table of "Tags" (as in tag words) and a table for "Entries", such at many "Entries" could correspond to many Tag words.
Right now I have my models like this:
# 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()
Now I'm confused, how would I setup my admin.py so I could then add tags when I create a new entry?
解决方案
What you need is using the through
feature of models:
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)
and now use that model in your admin:
class TagsInline(admin.TabularInline):
model = TaggedEntries
extra = 1
class EntryAdmin(admin.ModelAdmin):
inlines = (TagsInline, )
admin.site.register(Entry, EntryAdmin)
admin.site.register(Tag)
这篇关于Django管理中的关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文