Skip to content

Commit a5c9204

Browse files
committed
Add Tags and Upvote functionality
1 parent a821448 commit a5c9204

18 files changed

+919
-23
lines changed

accounts/templates/user_list.html

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{% extends 'base.html' %}
2+
{% block title %}User List{% endblock %}
3+
{% block page_heading %}
4+
<h2>User List</h2>
5+
<hr>
6+
{% endblock %}
7+
{% block content %}
8+
<table class="table table-sm">
9+
<thead>
10+
<tr>
11+
<th scope="col">ID</th>
12+
<th scope="col">User</th>
13+
<th scope="col">Role</th>
14+
<th scope="col">Email</th>
15+
</tr>
16+
</thead>
17+
<tbody>
18+
{% for user in users %}
19+
<tr>
20+
<td scope="row">{{ user.id }}</td>
21+
<td>{{ user.username }}</td>
22+
<td>placeholder</td>
23+
<td>{{ user.email }}</td>
24+
</tr>
25+
{% endfor %}
26+
</tbody>
27+
</table>
28+
{% endblock %}

accounts/urls.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.conf.urls import url, include
2+
from . import views
3+
from accounts.views import index, logout, login, registration, user_profile, user_list
4+
5+
urlpatterns = [
6+
# url(r'^user_list/$', views.user_list, name='user_list'),
7+
url(r'^logout/$', logout, name='logout'),
8+
url(r'^login/$', login, name='login'),
9+
url(r'^register/$', registration, name='registration'),
10+
url(r'^profile/$', user_profile, name='profile'),
11+
url(r'^user_list/$', user_list, name='user_list'),
12+
]

accounts/views.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,9 @@ def user_profile(request):
7171
"""User's profile page"""
7272
user = User.objects.get(email=request.user.email)
7373
return render(request, 'profile.html', {"profile": user})
74+
75+
76+
def user_list(request):
77+
"""Shows all users"""
78+
users = User.objects.filter()
79+
return render(request, 'user_list.html', {"users": users})

issue_tracker/settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
'django_forms_bootstrap',
4141
'accounts',
4242
'tickets',
43+
'taggit',
4344
]
4445

4546
MIDDLEWARE = [
@@ -122,4 +123,9 @@
122123

123124
STATIC_URL = '/static/'
124125

126+
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'), )
127+
STATIC_ROOT = (os.path.join(BASE_DIR, 'staticfiles'))
128+
125129
MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage"
130+
131+
TAGGIT_CASE_INSENSITIVE = True

issue_tracker/urls.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@
1515
"""
1616
from django.conf.urls import url, include
1717
from django.contrib import admin
18-
from accounts.views import index, logout, login, registration, user_profile
18+
from accounts.views import index, logout, login, registration, user_profile, user_list
1919

2020
urlpatterns = [
2121
# url(r'^$', admin.site.urls),
22+
url(r'^$', index, name='index'),
2223
url(r'^admin/', admin.site.urls),
2324
url(r'^tickets/', include('tickets.urls')),
24-
url(r'^$', index, name='index'),
25-
url(r'^accounts/logout/$', logout, name='logout'),
26-
url(r'^accounts/login/$', login, name='login'),
27-
url(r'^accounts/register/$', registration, name='registration'),
28-
url(r'^accounts/profile/$', user_profile, name='profile'),
25+
# move the below into accounts?
26+
url(r'^accounts/', include('accounts.urls')),
27+
# url(r'^accounts/logout/$', logout, name='logout'),
28+
# url(r'^accounts/login/$', login, name='login'),
29+
# url(r'^accounts/register/$', registration, name='registration'),
30+
# url(r'^accounts/profile/$', user_profile, name='profile'),
31+
# url(r'^accounts/user_list/$', user_list, name='user_list'),
2932
]

templates/base.html

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<meta name="viewport" content="width=device-width, initial-scale=1.0">
88
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
99
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
10+
{% block head %}
11+
{% endblock %}
1012
<title>{% block title %}{% endblock %}</title>
1113
</head>
1214

@@ -19,27 +21,37 @@
1921
</button>
2022
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
2123
<div class="navbar-nav">
22-
<a class="nav-item nav-link active" href="{% url 'tickets' %}">Tickets <span class="sr-only">(current)</span></a>
24+
<a class="nav-item nav-link active" href="{% url 'tickets' %}">Tickets <span
25+
class="sr-only">(current)</span></a>
2326
<a class="nav-item nav-link" href="{% url 'add_ticket' %}">Add Ticket</a>
2427
{% if user.is_authenticated %}
25-
<a class="nav-item nav-link" href="{% url 'profile' %}">Profile: {{ user }}</a>
26-
<a class="nav-item nav-link" href="{% url 'logout' %}">Log Out</a>
28+
<a class="nav-item nav-link" href="{% url 'user_list' %}">User List</a>
29+
<a class="nav-item nav-link" href="{% url 'profile' %}">Profile: {{ user }}</a>
30+
<a class="nav-item nav-link" href="{% url 'logout' %}">Log Out</a>
2731
{% else %}
28-
<a class="nav-item nav-link" href="{% url 'login' %}">Log In</a>
29-
<a class="nav-item nav-link" href="{% url 'registration' %}">Register</a>
32+
<a class="nav-item nav-link" href="{% url 'login' %}">Log In</a>
33+
<a class="nav-item nav-link" href="{% url 'registration' %}">Register</a>
3034
{% endif %}
3135
</div>
3236
</div>
3337
</nav>
3438
<div class="container">
35-
{% block page_heading %}
36-
{% endblock %}
37-
{% block content %}
38-
{% endblock %}
39+
{% block page_heading %}
40+
{% endblock %}
41+
{% block content %}
42+
{% endblock %}
3943
</div>
40-
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
41-
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
42-
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
44+
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
45+
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
46+
crossorigin="anonymous"></script>
47+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
48+
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
49+
crossorigin="anonymous"></script>
50+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
51+
integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
52+
crossorigin="anonymous"></script>
53+
{% block scripts %}
54+
{% endblock %}
4355
</body>
4456

4557
</html>

tickets/forms.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,15 @@
33

44
TICKET_TYPES = (('Bug', 'Bug'), ('Feature', 'Feature'))
55

6+
67
class AddTicketForm(forms.ModelForm):
78
ticket_type = forms.ChoiceField(choices=TICKET_TYPES, required=True)
9+
# tags = forms.CharField(required=False)
10+
811
class Meta:
912
model = Ticket
10-
fields = ('ticket_type', 'summary', 'description')
13+
widgets = {
14+
'summary': forms.TextInput(attrs={'placeholder': 'Summary'}),
15+
'description': forms.Textarea(attrs={'placeholder': 'Further Details'}),
16+
}
17+
fields = ('ticket_type', 'summary', 'description', 'tags')
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.24 on 2020-02-19 15:44
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('tickets', '0017_ticket_submitted_by'),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name='ticket',
17+
name='tags',
18+
field=models.CharField(blank=True, max_length=200),
19+
),
20+
]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.24 on 2020-02-19 16:24
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
import taggit.managers
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
('taggit', '0003_taggeditem_add_unique_index'),
13+
('tickets', '0018_ticket_tags'),
14+
]
15+
16+
operations = [
17+
migrations.RemoveField(
18+
model_name='ticket',
19+
name='tags',
20+
),
21+
migrations.AddField(
22+
model_name='ticket',
23+
name='tags',
24+
field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
25+
),
26+
]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.24 on 2020-02-19 16:56
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
import taggit.managers
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
('tickets', '0019_auto_20200219_1624'),
13+
]
14+
15+
operations = [
16+
migrations.AddField(
17+
model_name='ticket',
18+
name='upvotes',
19+
field=models.IntegerField(default=0),
20+
preserve_default=False,
21+
),
22+
migrations.AlterField(
23+
model_name='ticket',
24+
name='tags',
25+
field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
26+
),
27+
]

0 commit comments

Comments
 (0)