1
|
|
|
import inspect |
2
|
|
|
import sys |
3
|
|
|
|
4
|
|
|
from django.contrib import admin |
5
|
|
|
from django.contrib.admin import SimpleListFilter |
6
|
|
|
from django.core import urlresolvers |
7
|
|
|
from django.db.models import Count, ForeignKey |
8
|
|
|
from django.utils.html import format_html |
9
|
|
|
|
10
|
|
|
from chat import models |
11
|
|
|
from chat.models import UserJoinedInfo |
12
|
|
|
from django.conf import settings |
13
|
|
|
|
14
|
|
|
exclude_auto = () |
15
|
|
|
model_classes = (class_name[1] for class_name in inspect.getmembers(sys.modules[models.__name__], inspect.isclass) |
16
|
|
|
if class_name[1].__module__ == models.__name__ and class_name[0] not in exclude_auto) |
17
|
|
|
for model in model_classes: |
18
|
|
|
fields = [] |
19
|
|
|
class_struct = {'fields': fields, 'list_display': fields} |
20
|
|
|
for field in model._meta.fields: |
21
|
|
|
if isinstance(field, ForeignKey): |
22
|
|
|
def gen_link(field): |
23
|
|
|
def link(obj): |
24
|
|
|
print(field) |
25
|
|
|
another = getattr(obj, field.name) |
26
|
|
|
if another is None: |
27
|
|
|
return "Null" |
28
|
|
|
else: |
29
|
|
|
link = '/admin/chat/{}/{}/change'.format(another._meta.verbose_name, another.id) |
30
|
|
|
return u'<a href="%s">%s</a>' % (link, another.id) |
31
|
|
|
link.allow_tags = True |
32
|
|
|
link.__name__ = str(field.name) |
33
|
|
|
return link |
34
|
|
|
fields.append(gen_link(field)) |
35
|
|
|
else: |
36
|
|
|
fields.append(field.name) |
37
|
|
|
|
38
|
|
|
admin.site.register(model, type( |
39
|
|
|
'SubClass', |
40
|
|
|
(admin.ModelAdmin,), |
41
|
|
|
class_struct |
42
|
|
|
)) |
43
|
|
|
|
44
|
|
|
|
45
|
|
|
# class CountryFilter(SimpleListFilter): |
46
|
|
|
# title = 'country' |
47
|
|
|
# parameter_name = 'country' |
48
|
|
|
# |
49
|
|
|
# def lookups(self, request, model_admin): |
50
|
|
|
# query_set = model_admin.model.objects.values('ip__country').annotate(count=Count('ip__country')) |
51
|
|
|
# return [(c['ip__country'], '%s(%s)' % (c['ip__country'], c['count'])) for c in query_set] |
52
|
|
|
# |
53
|
|
|
# def queryset(self, request, queryset): |
54
|
|
|
# if self.value(): |
55
|
|
|
# return queryset.filter(ip__country=self.value()) |
56
|
|
|
# else: |
57
|
|
|
# return queryset |
58
|
|
|
# |
59
|
|
|
# |
60
|
|
|
# @admin.register(UserJoinedInfo) |
61
|
|
|
# class UserLocation(admin.ModelAdmin): |
62
|
|
|
# list_display = ["time", "link_to_B"] |
63
|
|
|
# |
64
|
|
|
# def link_to_B(self, obj): |
65
|
|
|
# link = urlresolvers.reverse("admin:chat_user_change", args=[obj.Object.id]) # model name has to be lowercase |
66
|
|
|
# return u'<a href="%s">%s</a>' % (link, obj.B.name) |
67
|
|
|
# |
68
|
|
|
# link_to_B.allow_tags = True |
69
|
|
|
|