【问题标题】:Relationships in Django AdminDjango Admin 中的关系
【发布时间】:2010-11-18 04:33:45
【问题描述】:

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

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

现在我的模型是这样的:

# 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 以便在创建新条目时添加标签?

【问题讨论】:

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


    【解决方案1】:

    您需要使用模型的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)
    

    【讨论】:

      【解决方案2】:

      你需要一些类似的东西:

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

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

      【讨论】:

      • 这就是我实际拥有的,我不断得到: 异常: has no ForeignKey to
      猜你喜欢
      • 2011-01-06
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2017-05-01
      • 2018-11-20
      • 2011-08-07
      • 2019-09-16
      相关资源
      最近更新 更多