Skip to content

Commit 2424b8c

Browse files
committed
Create Profile model with is_pro_user attribute
1 parent d99cd3c commit 2424b8c

File tree

4 files changed

+125
-11
lines changed

4 files changed

+125
-11
lines changed

accounts/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
from django.contrib import admin
2+
from .models import Profile
23

34
# Register your models here.
5+
6+
admin.site.register(Profile)

accounts/models.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
11
from django.db import models
2+
from django.contrib.auth.models import User
3+
from django.db.models.signals import post_save
4+
from django.dispatch import receiver
25

36
# Create your models here.
7+
8+
9+
class Profile(models.Model):
10+
user = models.OneToOneField(User, on_delete=models.CASCADE)
11+
is_pro_user = models.BooleanField(default=False)
12+
13+
def __str__(self):
14+
return self.user.username
15+
16+
# bio = models.TextField(max_length=500, blank=True)
17+
# location = models.CharField(max_length=30, blank=True)
18+
# birth_date = models.DateField(null=True, blank=True)
19+
20+
21+
@receiver(post_save, sender=User)
22+
def create_user_profile(sender, instance, created, **kwargs):
23+
if created:
24+
Profile.objects.create(user=instance)
25+
26+
27+
@receiver(post_save, sender=User)
28+
def save_user_profile(sender, instance, **kwargs):
29+
instance.profile.save()

accounts/templates/profile.html

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,84 @@
11
{% extends 'base.html' %}
22
{% block title %}{{ user }}'s Profile{% endblock %}
3-
{% block page_heading %}
4-
<h2>Profile</h2>
5-
<hr>
6-
{% endblock %}
3+
{% block page_heading %} <i class="material-icons">account_circle</i> My Account{% endblock %}
74
{% block content %}
8-
{{ user }}
9-
<p>{{ profile.email }}</p>
10-
{% endblock %}
5+
<div class="row">
6+
<div class="col-sm-2">
7+
<p><i class="material-icons">account_circle</i></p>
8+
<p><a href="#">Add Avatar</a></p>
9+
</div>
10+
<div class="col-sm-10">
11+
<br>
12+
<table class="table table-sm">
13+
<tbody>
14+
<tr>
15+
<th>Username</th>
16+
<td>{{ user.username }} </td>
17+
</tr>
18+
<tr>
19+
<th>First Name</th>
20+
<td>{{ user.first_name }} </td>
21+
</tr>
22+
<tr>
23+
<th>Last Name</th>
24+
<td>{{ user.last_name }}</td>
25+
</tr>
26+
<tr>
27+
<th>Email</th>
28+
<td>{{ user.email }} <a href="#" class="float-right">Update</a></td>
29+
</tr>
30+
<tr>
31+
<th>Member Since</th>
32+
<td>{{ user.date_joined.date }}</td>
33+
</tr>
34+
<tr>
35+
<th>Staff</th>
36+
<td>{{ user.is_staff }}</td>
37+
</tr>
38+
<tr>
39+
<th>Current Plan</th>
40+
{% if user.profile.is_pro_user %}
41+
<td><span class="badge badge-primary">PRO</span></td>
42+
{% else %}
43+
<td>Basic</td>
44+
{% endif %}
45+
</tr>
46+
</tbody>
47+
</table>
48+
</div>
49+
</div>
50+
<div class="row">
51+
<div class="col-sm-12 text-center">
52+
<h3>Plans</h3>
53+
<br>
54+
</div>
55+
</div>
56+
<div class="row">
57+
<div class="col-sm-6 text-center">
58+
<div class="jumbotron">
59+
{% if user.profile.is_pro_user %}
60+
<h5>BASIC</h5>
61+
<p>Max Tickets/Month: 10/month</p>
62+
{% else %}
63+
<h5>BASIC <span class="badge badge-secondary">Current</span></h5>
64+
<p>Max Tickets/Month: 10/month</p>
65+
<p>Tickets Remaining This Month: placeholder</p>
66+
{% endif %}
67+
</div>
68+
</div>
69+
<div class="col-sm-6 text-center">
70+
<div class="jumbotron">
71+
{% if user.profile.is_pro_user %}
72+
<h5>PRO <span class="badge badge-primary align-top">Current Plan</span></h5>
73+
<p>Max Tickets/Month: Unlimited</p>
74+
<p>Kanban View: Available</p>
75+
{% else %}
76+
<h5>PRO</h5>
77+
Unlock <a href="#">Kanban View</a></p>
78+
<p>9.90 EUR / month</p>
79+
<p><a href="{% url 'checkout' %}" class="btn btn-primary">Go PRO</a></p>
80+
{% endif %}
81+
</div>
82+
</div>
83+
</div>
84+
{% endblock %}

accounts/views.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from django.contrib import auth, messages
33
from django.contrib.auth.decorators import login_required
44
from django.contrib.auth.models import User
5+
from .models import Profile
56
from accounts.forms import UserLoginForm, UserRegistrationForm
67

78
# Create your views here.
@@ -67,13 +68,23 @@ def registration(request):
6768
"registration_form": registration_form})
6869

6970

71+
@login_required()
7072
def user_profile(request):
7173
"""User's profile page"""
7274
user = User.objects.get(email=request.user.email)
73-
return render(request, 'profile.html', {"profile": user})
75+
return render(request, 'profile.html', {"user": user})
7476

7577

78+
@login_required()
7679
def user_list(request):
77-
"""Shows all users"""
78-
users = User.objects.filter()
79-
return render(request, 'user_list.html', {"users": users})
80+
"""Shows list of all users"""
81+
# users = User.objects.filter()
82+
sort_field = request.GET['sort_by'] if 'sort_by' in request.GET else 'id'
83+
users = User.objects.filter().order_by(sort_field)
84+
# Staff
85+
staff = User.objects.filter(is_staff=1).order_by(sort_field)
86+
# Submitters
87+
submitters = User.objects.filter(is_staff=0).order_by(sort_field)
88+
return render(request, 'user_list.html', {"users": users,
89+
"staff": staff,
90+
"submitters": submitters})

0 commit comments

Comments
 (0)