虽然感觉接触django很长时间了,django是一个复杂且灵活的web框架,由于框架用的是python语言,所以在国内还算是比较小众语言和框架。
了解django的人都应该知道django的admin站点管理系统,如果能灵活的应用,那么在项目的开发阶段,他能帮你处理很多后台的事情,使你的开发工作游刃有余。
admin基础的用法这里就不讲了,这里着重强调几个常用的函数,这几个函数在admin中使用的频率还是比较高的。
1.formfield_for_foreignkey(self, db_field, request, **kwargs)
The formfield_for_foreignkey method on a ModelAdmin allows you to override the default formfield for a foreign keys field. For example, to return a subset of objects for this foreign key field based on the user:
本人英文不是很好:看例子
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if not request.user.is_superuser:
if db_field.name == "catagory":
shop=Shop.objects.get(username=request.user.username)
kwargs["queryset"] = Catagory.objects.filter(shop=shop)
else:
kwargs["queryset"] =Catagory.objects.all()
return super(GoodsAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
2.queryset(self, request)
The queryset method on a ModelAdmin returns a QuerySet of all model instances that can be edited by the admin site. One use case for overriding this method is to show objects owned by the logged-in user
def queryset(self, request):
qs = super(ShopAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(username=request.user.username,boss_verified=True)
3.get_readonly_fields(self, request,obj=None)
The get_readonly_fields method is given the HttpRequest and the obj being edited (or None on an add form) and is expected to return a list or tuple of field names that will be displayed as read-only, as described above in the ModelAdmin.readonly_fields section
def get_readonly_fields(self, request,obj=None):
fields=[]
if request.user.is_superuser:
return fields
else:
fields=['boss_verified','deliver_during']
return fields
这个方法指的是当登录用户不是超级用户的时候,此admin中的boss_verified ,deliver_during两个字段不可编辑,为只读状态。
关于admin的其他函数,django的官方文档都有介绍,但是都是英文文档,有些都没有事例,所以增加了学习的难度,本人有时间会一一介绍下。