在Django admin的模型列表视图中,有一个按钮可以添加一个模型。我想扩展一下,并能够一次添加多个项目。我的模型适用于图像,因此能够一次添加多个图像会很棒。
我已成功在单个模型视图中创建自定义字段,但不知道从列表视图开始的位置。有人至少可以指出我正确的方向吗?
编辑:
我想更改此视图,并在右上方添加一个按钮,以便"添加多个图像"
答案 0 :(得分:0)
我想你想用tabularinline or stackedinline 假设您的模型具有一组图像和每个图像的模型 (例如。
class Portfolio(models.Model):
name = models.CharField(max_length=100)
class Image(models.Model):
port = models.ForeignKey(Portolio)
name = models.CharField(max_length=100)
img = models.ImageField() # or however you're storing the image, e.g. as a URL,
然后,您可以在admin.py中创建
class ImageInline(admin.TabularInline):
model = Image
class PortfolioAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]
(你也可以指定附加内容,例如开始使用多少内联模型表单,但这应该让你开始,假设这是你的意思)
答案 1 :(得分:0)
好的,我明白了。它非常复杂,但并不坏:
第1步:改变ModelsAdmin定义中的change_list_template
class ImageAdmin(admin.ModelAdmin):
...
change_list_template = 'admin/my_change_list.html'
...
第2步:复制并更改change_list.html
我在这里添加了新按钮
<li>
{% url cl.opts|admin_urlname:'add' as add_url %}
<a href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink">
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
</a>
</li>
<li>
{% url cl.opts|admin_urlname:'addmany' as add_url %}
<a href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink">
{% blocktrans with cl.opts.verbose_name as name %}Add Many{{ name }}{% endblocktrans %}
</a>
</li>
第3步:将新的Add Many
网址添加到模型
def get_urls(self):
from django.conf.urls import patterns, url
def wrap(view):
def wrapper(*args, **kwargs):
return self.admin_site.admin_view(view)(*args, **kwargs)
return update_wrapper(wrapper, view)
info = self.model._meta.app_label, self.model._meta.model_name
urlpatterns = patterns('',
# I added this!
url(r'^addmany/$', wrap(self.add_multiple_view), name='%s_%s_addmany' % info),
url(r'^$', wrap(self.changelist_view), name='%s_%s_changelist' % info),
url(r'^add/$', wrap(self.add_view), name='%s_%s_add' % info),
url(r'^(.+)/history/$', wrap(self.history_view), name='%s_%s_history' % info),
url(r'^(.+)/delete/$', wrap(self.delete_view), name='%s_%s_delete' % info),
url(r'^(.+)/$', wrap(self.change_view), name='%s_%s_change' % info),
)
return urlpatterns
第4步:创建视图def
def add_multiple_view(self, request):
return TemplateResponse(request, 'admin/add_many.html', {}, current_app=self.admin_site.name)
第5步:创建add_many.html