在Django admin的models列表视图中,有一个按钮可以添加一个模型。我想扩展一下这一点,并且能够一次添加多个项目。我的模型是用于图像的,所以能够一次添加多个图像将是很好的。
我已经成功地在单个模型视图中创建了自定义字段,但不知道从列表视图开始。至少有人能给我指个正确的方向吧?
编辑:
我想要更改此视图,并在右上角添加一个按钮以“添加多个图像”
发布于 2015-03-17 02:26:20
我认为您应该使用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,
]
(您还可以指定额外的,例如,开始时有多少内联模型表单,但假设这就是您的意思,这应该可以让您开始)
发布于 2015-03-18 00:02:55
好的,我知道了。这相当复杂,但也不是那么糟糕:
步骤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
url添加到模型中
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 add_multiple_view(self, request):
return TemplateResponse(request, 'admin/add_many.html', {}, current_app=self.admin_site.name)
第5步:创建add_many.html
https://stackoverflow.com/questions/29090172
复制