Django管理中的关系 [英] Relationships in Django Admin

查看:94
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆