Sorts users after last purchase
This commit is contained in:
1 parent
85071ba6af
commit
8cdddefacc
3 files changed
+21
-5
No files matched your search
@@ -2,6 +2,7 @@ from django.contrib.auth.models import User
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
class Product(models.Model):
|
class Product(models.Model):
|
||||||
|
|
||||||
@@ -53,6 +54,18 @@ class UserProfile(models.Model):
|
|||||||
balance = models.FloatField(default=0.0)
|
balance = models.FloatField(default=0.0)
|
||||||
image = models.ImageField(upload_to='users', blank=True)
|
image = models.ImageField(upload_to='users', blank=True)
|
||||||
|
|
||||||
|
def last_purchase(self):
|
||||||
|
if len(self.user.order_set.all()) == 0:
|
||||||
|
return None
|
||||||
|
return self.user.order_set.order_by('created').reverse()[0]
|
||||||
|
|
||||||
|
def last_purchase_date(self):
|
||||||
|
last = self.last_purchase()
|
||||||
|
if last:
|
||||||
|
return last.created
|
||||||
|
else:
|
||||||
|
return datetime.min
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return "{0}".format(self.user)
|
return "{0}".format(self.user)
|
||||||
|
|
||||||
|
|||||||
+8
-4
@@ -31,6 +31,8 @@ def home(request):
|
|||||||
def register(request):
|
def register(request):
|
||||||
products = Product.objects.all()
|
products = Product.objects.all()
|
||||||
users = User.objects.filter(userprofile__balance__gt=0)
|
users = User.objects.filter(userprofile__balance__gt=0)
|
||||||
|
# sort users after user's last purchase time
|
||||||
|
users = sorted(users, key=lambda u: u.get_profile().last_purchase_date(), reverse=True)
|
||||||
users_js = users_format_js(users)
|
users_js = users_format_js(users)
|
||||||
|
|
||||||
# multiple orderlines (one per product)
|
# multiple orderlines (one per product)
|
||||||
@@ -80,7 +82,7 @@ def register(request):
|
|||||||
return render_to_response('register.html', locals(), context_instance=RequestContext(request))
|
return render_to_response('register.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
def deposit(request):
|
def deposit(request):
|
||||||
users = User.objects.all()
|
users = User.objects.all().order_by('first_name','last_name')
|
||||||
users_js = users_format_js(users)
|
users_js = users_format_js(users)
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
@@ -109,7 +111,9 @@ def logout(request):
|
|||||||
return render_to_response('registration/logout.html', locals(), context_instance=RequestContext(request))
|
return render_to_response('registration/logout.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
def users_format_js(users):
|
def users_format_js(users):
|
||||||
users = "[{0}]".format(
|
users_js = []
|
||||||
",".join(['"'+user[0]+ ' ' + user[1][:1] + '"' for user in users.values_list('first_name','last_name')]))
|
for user in users:
|
||||||
return users
|
users_js.append('"' + user.first_name + ' ' + user.last_name[:1] + '"')
|
||||||
|
users_js = "[{0}]".format(",".join(users_js))
|
||||||
|
return users_js
|
||||||
|
|
||||||
@@ -40,7 +40,6 @@
|
|||||||
<img class="profile" src="{% gravatar_for_user user %}" /><br />
|
<img class="profile" src="{% gravatar_for_user user %}" /><br />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="name">{{ user.first_name }} {{ user.last_name|slice:":1"}}</span> ({{ user.get_profile.balance }})
|
<span class="name">{{ user.first_name }} {{ user.last_name|slice:":1"}}</span> ({{ user.get_profile.balance }})
|
||||||
<span class="username" style="display:none;">{{ user }}</span>
|
|
||||||
<span class="id" style="display:none;">{{ user.id }}</span>
|
<span class="id" style="display:none;">{{ user.id }}</span>
|
||||||
</li>
|
</li>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
Reference in new issue
Block a user