我有2个型号。 第一个模型包含用户字段和文件字段(地址到文件)。对于一个用户,它只能是一个文件。 第二个模型是相同的,但它是某种存档文件。因此,对于一个用户来说,它可以是很多文件。
我想为同一用户的第二个模型添加管理编辑第一个模型页面链接列表。 我怎么能这样做?什么是最好的方法?我应该重新定义管理模型模板和视图吗?
示例:
用户 - 姓名
文件 - 指向文件<<<<<<<<<<<<我从django管理编辑页面开箱即用
存档文件:<<<<<<<<<<我想添加归档文件的链接列表
链接到file1
链接到file2
...
链接到文件N
UPD: 我的模型看起来像这样:
class UserFile(models.Model):
user = models.ForeignKey(User)
file = PrivateImageField(...)
class ArchivedUserFile(models.Model):
user = models.ForeignKey(User)
file = PrivateImageField(...)
答案 0 :(得分:0)
听起来我想要使用Django的内联管理员。表格内联非常易于使用且功能齐全。
所以对于这段代码:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)
您可以注册这些管理员来管理作者及其创建的书籍:
from django.contrib import admin
class BookInline(admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
inlines = [
BookInline,
]
不要忘记注册您的管理员
from django.contrib import admin
admin.site.register(Author, AuthorAdmin)
我从
获得了所有这些https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects
或强>
如果您只想自己管理,可以编辑模板。唐'吨 忘了把你的iterator / QuerySet放到上下文中,这样你就可以了。
请参阅相关文档。
https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#overriding-admin-templates https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#custom-template-options
并覆盖admin.ModelAdmin上的change_view方法:
def change_view(self, request, object_id, form_url='', extra_content=None):
// Set up vars
context = {'things': list_of_things}
return super(AuthorAdmin, self).change_view(request, object_id, form_url, context)
答案 1 :(得分:0)
没有理由你不能在这里使用内联。主要的障碍是用户模型自动在管理员中注册。按照以下方式制作ModelAdmin:
...
from django.contrib.auth import User
...
class UserFileInline(admin.TabularInline):
model = UserFile
class ArchivedUserFileInline(admin.TabularInline):
model = ArchivedUserFile
class UserAdmin(admin.ModelAdmin):
inlines = (
UserFileInline,
ArchivedUserFileInline,
)
# Unregister User from the admin and re-register with our ModelAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
现在,您可以使用用户管理员中的文件进行播放。