Archived
Fixed implementation to match tests.
This commit is contained in:
1 parent
59b0efc84a
commit
6ae201c71c
4 files changed
+47
-6
No files matched your search
@@ -122,7 +122,7 @@ INSTALLED_APPS = (
|
||||
)
|
||||
|
||||
# Profile of the User class used for authentication.
|
||||
AUTH_PROFILE_MODEL = 'main.models.Member'
|
||||
AUTH_PROFILE_MODULE = 'main.Member'
|
||||
|
||||
# A sample logging configuration. The only tangible logging
|
||||
# performed by this configuration is to send an email to
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from tastypie import fields
|
||||
from tastypie.resources import ModelResource, ALL
|
||||
from tastypie.authorization import Authorization
|
||||
from main.models import *
|
||||
@@ -9,6 +10,11 @@ class MemberResource(ModelResource):
|
||||
(1) /api/v1/member/
|
||||
(2) /api/v1/member/{id}/
|
||||
"""
|
||||
username = fields.CharField(attribute='username', readonly=True)
|
||||
email = fields.CharField(attribute='email', readonly=True)
|
||||
first_name = fields.CharField(attribute='first_name', readonly=True)
|
||||
last_name = fields.CharField(attribute='last_name', readonly=True)
|
||||
|
||||
class Meta:
|
||||
queryset = Member.objects.all()
|
||||
resource_name = 'member'
|
||||
@@ -17,8 +23,38 @@ class MemberResource(ModelResource):
|
||||
authorization = Authorization() # TODO: for dev (VERY INSECURE)
|
||||
excludes = [ 'password' ]
|
||||
filtering = {
|
||||
'username' : ALL,
|
||||
'epost' : ALL,
|
||||
'phone_number' : ALL
|
||||
'username' : [ 'exact' ],
|
||||
'email' : [ 'exact' ],
|
||||
'first_name' : [ 'exact' ],
|
||||
'last_name' : [ 'exact' ],
|
||||
'phone_number' : [ 'exact' ],
|
||||
}
|
||||
|
||||
def build_filters(self, filters=None):
|
||||
if filters is None:
|
||||
filters = {}
|
||||
|
||||
orm_filters = super(MemberResource, self).build_filters(filters)
|
||||
return orm_filters
|
||||
|
||||
def apply_filters(self, request, applicable_filters):
|
||||
extra_filters = {}
|
||||
if 'username__exact' in applicable_filters:
|
||||
extra_filters['username'] = applicable_filters.pop('username__exact')
|
||||
if 'first_name__exact' in applicable_filters:
|
||||
extra_filters['first_name'] = applicable_filters.pop('first_name__exact')
|
||||
if 'last_name__exact' in applicable_filters:
|
||||
extra_filters['last_name'] = applicable_filters.pop('last_name__exact')
|
||||
if 'email__exact' in applicable_filters:
|
||||
extra_filters['email'] = applicable_filters.pop('email__exact')
|
||||
|
||||
|
||||
filters = super(MemberResource, self).apply_filters(request, applicable_filters)
|
||||
|
||||
for key,value in extra_filters.items():
|
||||
filters = filter(lambda m: getattr(m.user, key) == value, filters)
|
||||
|
||||
return filters
|
||||
|
||||
def dehydrate(self, bundle):
|
||||
return bundle
|
||||
@@ -11,6 +11,7 @@ class MembershipResource(ModelResource):
|
||||
(1) /api/v1/membership/
|
||||
"""
|
||||
member = fields.ForeignKey(MemberResource, 'member')
|
||||
expires = fields.DateTimeField(attribute='expires', readonly=True)
|
||||
|
||||
class Meta:
|
||||
queryset = Membership.objects.all()
|
||||
@@ -24,8 +25,7 @@ class MembershipResource(ModelResource):
|
||||
}
|
||||
|
||||
def dehydrate(self, bundle):
|
||||
bundle.data['expires'] = str(bundle.obj.expires().date())
|
||||
bundle.data['member'] = bundle.obj.member.id
|
||||
bundle.data['mtype'] = bundle.obj.mtype.id
|
||||
bundle.data['payment'] = bundle.obj.payment.id
|
||||
bundle.data['payment'] = None if not bundle.obj.payment else bundle.obj.payment.id
|
||||
return bundle
|
||||
@@ -29,6 +29,11 @@ class Member(models.Model):
|
||||
# Auth:
|
||||
user = models.OneToOneField(User)
|
||||
|
||||
def username(self): return self.user.username
|
||||
def email(self): return self.user.email
|
||||
def first_name(self): return self.user.first_name
|
||||
def last_name(self): return self.user.last_name
|
||||
|
||||
# Profile fields:
|
||||
phone_number = models.IntegerField(unique=True, null=True, blank=True)
|
||||
date_of_birth = models.DateField(blank=True, null=True)
|
||||
|
||||
Reference in new issue
Block a user