将 URL 中的参数传递给 Django Admin add_view
Pass parameters in URL to Django Admin add_view
我需要将 URL 中的参数传递给 Django Admin add
视图,这样当我输入 URL :http://localhost:8000/admin/myapp/car/add?brand_id=1
,add_view
读取brand_id
参数。我想使用它,以便我可以为 Car
.
的 brand
属性设置默认值
def get_form(self, request, obj=None, **kwargs):
form = super(CarAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['brand'].initial = <<GET['brand_id']>>
return form
用例:我想要这个是因为在我的 BrandsAdmin
中,我为每个品牌添加了一个“+”按钮,应该添加一个 Car
和 Brand
作为 FK .
我试过从 request
在 get_form
中获取它,但是当执行该代码时,Django 已经更改了我的 URL 因为我猜它不理解它作为“合法”参数。
非常感谢!
您可以找到完整的解释 here,但很快:
您可以直接从视图访问查询参数,请求对象有一个方法。我想这是一个 GET 请求,所以您的实施示例是:
request.GET.getlist("brand_id")
或
request.GET.get("brand_id")
主要是我想做的,两步就这么简单
首先,在 list_display
中添加一列以显示 link 到 add_view
:
Brand.py
@admin.display(description='Link', ordering='url')
def get_add_link(self):
url = f"{reverse('admin:myapp_car_add')}?brand={self.id}"
return format_html(f"<a href='{url}'><i class='fas fa-plus'></i></a>")
请注意,我将 URL 添加为 admin:<app>_<model>_<action>
的反义词,并将品牌 ID 作为参数传递。
CarAdmin.py
def get_changeform_initial_data(self, request):
brand_id = request.GET.get('brand')
return {'brand': brand_id}
通过在 CarAdmin
class 中添加此方法,我可以将品牌设置为默认值。
我需要将 URL 中的参数传递给 Django Admin add
视图,这样当我输入 URL :http://localhost:8000/admin/myapp/car/add?brand_id=1
,add_view
读取brand_id
参数。我想使用它,以便我可以为 Car
.
brand
属性设置默认值
def get_form(self, request, obj=None, **kwargs):
form = super(CarAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['brand'].initial = <<GET['brand_id']>>
return form
用例:我想要这个是因为在我的 BrandsAdmin
中,我为每个品牌添加了一个“+”按钮,应该添加一个 Car
和 Brand
作为 FK .
我试过从 request
在 get_form
中获取它,但是当执行该代码时,Django 已经更改了我的 URL 因为我猜它不理解它作为“合法”参数。
非常感谢!
您可以找到完整的解释 here,但很快:
您可以直接从视图访问查询参数,请求对象有一个方法。我想这是一个 GET 请求,所以您的实施示例是:
request.GET.getlist("brand_id")
或
request.GET.get("brand_id")
主要是我想做的,两步就这么简单
首先,在 list_display
中添加一列以显示 link 到 add_view
:
Brand.py
@admin.display(description='Link', ordering='url')
def get_add_link(self):
url = f"{reverse('admin:myapp_car_add')}?brand={self.id}"
return format_html(f"<a href='{url}'><i class='fas fa-plus'></i></a>")
请注意,我将 URL 添加为 admin:<app>_<model>_<action>
的反义词,并将品牌 ID 作为参数传递。
CarAdmin.py
def get_changeform_initial_data(self, request):
brand_id = request.GET.get('brand')
return {'brand': brand_id}
通过在 CarAdmin
class 中添加此方法,我可以将品牌设置为默认值。