管理行動似乎在django管理界面的列表視圖中選擇了若干項工作:單個對象Django管理操作
在我的情況,我想對改變一個簡單的動作按鈕(一個項目)視圖。
有沒有辦法使django管理員操作在那裏可用?
我知道我可以通過轉到列表視圖來解決這個問題,並在那裏選擇一個項目。但直接可用它會更好。
管理行動似乎在django管理界面的列表視圖中選擇了若干項工作:單個對象Django管理操作
在我的情況,我想對改變一個簡單的動作按鈕(一個項目)視圖。
有沒有辦法使django管理員操作在那裏可用?
我知道我可以通過轉到列表視圖來解決這個問題,並在那裏選擇一個項目。但直接可用它會更好。
在你的應用程序模型創建一個模板。
templates/admin/<yourapp>/<yourmodel>/change_form.html
有了這個示例的內容來添加一個按鈕,當改變一個現有的對象。
{% extends "admin/change_form.html" %}
{% block submit_buttons_bottom %}
{{ block.super }}
{% if original %} {# Only show if changing #}
<div class="submit-row">
<a href="{% url 'custom-model-action' original.pk %}">
Another action
</a>
</div>
{% endif %}
{% endblock %}
將該操作鏈接到任何URL並重定向回您的模型更改對象視圖。 More information about extending admin templates。
更新:新增完整的常見使用自定義操作現有對象
urls.py
urlpatterns = [
url(r'^custom_model_action/(?P<object_pk>\d+)/$',
core_views.custom_model_action, name='custom-model-action')
]
views.py
from django.contrib import messages
from django.http import HttpResponse, HttpResponseRedirect
def custom_model_action(request, object_pk):
messages.info(request, 'Performed custom action!')
return HttpResponseRedirect(
reverse('admin:<yourapp>_<yourmodel>_change', args=[object_pk])
)
如果你真的需要每一個對象,我建議你使用此解決方案,如:
class Gallery(TimeStampedModel):
title = models.CharField(max_length=200)
attachment = models.FileField(upload_to='gallery/attachment/%Y/%m/%d')
def __str__(self):
return self.title
def process_button(self):
return ('<button id="%(id)s class="btn btn-default process_btn" '
'data-value="%(value)s>Process</button>' % {'id': self.pk, 'value': self.attachment.url})
process_button.short_description = 'Action'
process_button.allow_tags = True
在你admin.py
,插入process_button
爲list_display
;
class GalleryAdmin(admin.ModelAdmin):
list_display = ['title', 'process_button', 'created']
search_fields = ['title', 'pk']
....
class Media:
js = ('path/to/yourfile.js',)
然後,裏面yourfile.js
,你也可以處理它..
$('.process_btn').click(function(){
var id = $(this).attr('id'); // single object id
var value = $(this).data('value'); // single object value
...
});
希望它有幫助..
的內置上在管理操作中對查詢集進行操作。
您可以使用您的whant行動calable或顯示別的東西:
class ProductAdmin(admin.ModelAdmin):
list_display ('name')
readonly_fields('detail_url)
def detail_url(self, instance):
url = reverse('product_detail', kwargs={'pk': instance.slug})
response = format_html("""<a href="{0}">{0}</a>""", product_detail)
return response
或使用形式
class ProductForm(forms.Form):
name = forms.Charfield()
def form_action(self, product, user):
return Product.value(
id=product.pk,
user= user,
.....
)
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
# render buttons and links to
def product_actions(self, obj):
return format_html(
'<a class="button" href="{}">Action1</a> '
'<a class="button" href="{}">Action 2</a>',
reverse('admin:product-action-1', args=[obj.pk]),
reverse('admin:aproduct-action-3', args=[obj.pk]),
)