-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathdjango.py
More file actions
102 lines (78 loc) · 2.99 KB
/
django.py
File metadata and controls
102 lines (78 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import json
from collections import OrderedDict
from django.conf import settings
try:
from django.core import urlresolvers
except ImportError:
from django import urls as urlresolvers
try:
from django.urls.exceptions import NoReverseMatch
except ImportError:
from django.core.urlresolvers import NoReverseMatch
from django.utils.html import format_html
from django.utils.safestring import mark_safe
MAX = 75
class LogEntryAdminMixin(object):
def created(self, obj):
return obj.timestamp.strftime('%Y-%m-%d %H:%M:%S')
created.short_description = 'Created'
def user_url(self, obj):
if obj.actor:
app_label, model = settings.AUTH_USER_MODEL.split('.')
viewname = 'admin:%s_%s_change' % (app_label, model.lower())
try:
link = urlresolvers.reverse(viewname, args=[obj.actor.id])
except NoReverseMatch:
return u'%s' % (obj.actor)
return format_html(u'<a href="{}">{}</a>', link, obj.actor)
return 'system'
user_url.short_description = 'User'
def msg_short(self, obj):
if obj.action == 2:
return '' # delete
changes = json.loads(obj.changes)
s = '' if len(changes) == 1 else 's'
fields = ', '.join(changes.keys())
if len(fields) > MAX:
i = fields.rfind(' ', 0, MAX)
fields = fields[:i] + ' ..'
return '%d change%s: %s' % (len(changes), s, fields)
msg_short.short_description = 'Changes'
def msg(self, obj):
if obj.action == 2:
return '' # delete
changes = json.loads(obj.changes)
msg = '<table><tr><th>#</th><th>Field</th><th>From</th><th>To</th></tr>'
for i, field in enumerate(sorted(changes), 1):
value = [i, field] + (['***', '***'] if field == 'password' else changes[field])
msg += format_html('<tr><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>', *value)
msg += '</table>'
return mark_safe(msg)
msg.short_description = 'Changes'
class State(models.Model):
name=models.CharField(max_length=150)
class City(models.Model):
name=models.CharField(max_length=150)
class Student(models.Model):
name=models.CharField(max_length=150)
state_id=models.PositiveIntegerField()
city_id=models.PositiveIntegerField()
is_active = models.BooleanField(default=False)
students = Student.objects.filter(
is_active=True,
).extra(
select={
'state':
'SELECT name FROM state WHERE '
'state.id = '
'testapp_student.state_id',
'city':
'SELECT name FROM city WHERE '
'city.id = '
'testapp_student.city_id',
},
)
students_2 = Student.objects.extra(
select=OrderedDict([('a', '%s'), ('b', '%s')]),
select_params=('one', 'two'))
Students_3 = Student.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])