Django在管理界面中添加相关字段

时间:2017-11-20 14:52:24

标签: django django-admin

目前在我的管理员中,我有很多摘录,管理员用户可以创建,然后进入"女性"界面并附上摘录。是否可以在摘录管理员中添加选择字段,用户可以选择摘录所属的女性,而不是创建摘录并进入"女性"界面创建关系?

class Excerpt(models.Model):
  extract = models.CharField(max_length=2000, null=True, blank=True)
  audio_url = models.IntegerField(null=True, blank=True)
  start_time = models.IntegerField(null=True, blank=True)
  end_time = models.IntegerField(null=True, blank=True)
  def __unicode__(self):
      return self.extract

class Women(models.Model):
    name = models.CharField(max_length=100)
    location = models.ForeignKey(Location, null=True, blank=True)
    excerpt = models.ManyToManyField(Excerpt, blank=True)

2 个答案:

答案 0 :(得分:2)

考虑到您更改了我在评论中指出的关系,您需要先删除manytomany中的Women关系然后更改您的  Excerpt模型了一下。你要做的是在你的Excerpt模型中有一个外键到Women那样,

class Excerpt(models.Model):
    women = models.ForeignKey(Women, ...)

另一个答案有正确的方法,但执行错误,这是在你的情况下实现内联的正确方法,

class ExcerptInline(admin.TabularInline):
    model = Excerpt


class WomenAdmin(admin.ModelAdmin):
    inlines = [ExcerptInline]

你最终想要注册整个事情,

admin.site.register(Women, WomenAdmin)

现在,随意根据您的需求个性化所有内容,但这些是我认为您所寻找的基础知识。

答案 1 :(得分:0)

  

您可以使用TabularInline在摘录模型中选择女性

class ExcerptInline(admin.TabularInline):
    model = Women.excerpt.through
    extra = 0
    show_change_link = True

    def has_add_permission(self, request, obj=None):
        return True


class ExcerptAdmin(admin.ModelAdmin):
    list_display = ['start_time', 'end_time']
    inlines = [ExcerptInline]

class WomenAdmin(admin.ModelAdmin):
    list_display = ['name']
  

最后添加

admin.site.register(Women, WomenAdmin)
admin.site.register(Excerpt, ExcerptAdmin)