Skip to content

Commit e2d1ff5

Browse files
authored
Merge pull request #28 from devmahmud/dev
Improvements & bug fixes
2 parents 0f579eb + 941b949 commit e2d1ff5

File tree

9 files changed

+67
-13
lines changed

9 files changed

+67
-13
lines changed

accounts/templates/accounts/register.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{% block content %}
44
<div class="container">
55
<div class="row center">
6-
<div class="col-md-6 offset-md-3">
6+
<div class="col-md-5 mx-auto p-5 shadow-sm border rounded border-primary">
77
<p>Already have an account? <a href="{% url 'accounts:login' %}">Login Here</a></p>
88
{% if messages %}
99
<div class="messages">

polls/admin.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,28 @@
22
from .models import Poll, Choice, Vote
33

44

5+
class ChoiceInline(admin.TabularInline): # or admin.StackedInline for a different layout
6+
model = Choice
7+
extra = 1
8+
59
@admin.register(Poll)
610
class PollAdmin(admin.ModelAdmin):
7-
list_display = ["text", "owner", "pub_date", "active"]
11+
list_display = ["text", "owner", "pub_date", "active", "created_at"]
812
search_fields = ["text", "owner__username"]
9-
list_filter = ["active"]
13+
list_filter = ["active", 'created_at', 'pub_date']
1014
date_hierarchy = "pub_date"
15+
inlines = [ChoiceInline]
1116

1217

1318
@admin.register(Choice)
1419
class ChoiceAdmin(admin.ModelAdmin):
15-
list_display = ["choice_text", "poll"]
20+
list_display = ["choice_text", "poll", 'created_at', 'updated_at']
1621
search_fields = ["choice_text", "poll__text"]
1722
autocomplete_fields = ["poll"]
1823

1924

2025
@admin.register(Vote)
2126
class VoteAdmin(admin.ModelAdmin):
22-
list_display = ["choice", "poll", "user"]
27+
list_display = ["choice", "poll", "user", 'created_at']
2328
search_fields = ["choice__choice_text", "poll__text", "user__username"]
2429
autocomplete_fields = ["choice", "poll", "user"]
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Generated by Django 3.1.14 on 2023-10-18 07:18
2+
3+
from django.db import migrations, models
4+
import django.utils.timezone
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('polls', '0001_initial'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='choice',
16+
name='created_at',
17+
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
18+
preserve_default=False,
19+
),
20+
migrations.AddField(
21+
model_name='choice',
22+
name='updated_at',
23+
field=models.DateTimeField(auto_now=True),
24+
),
25+
migrations.AddField(
26+
model_name='poll',
27+
name='created_at',
28+
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
29+
preserve_default=False,
30+
),
31+
migrations.AddField(
32+
model_name='vote',
33+
name='created_at',
34+
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
35+
preserve_default=False,
36+
),
37+
migrations.AddField(
38+
model_name='vote',
39+
name='updated_at',
40+
field=models.DateTimeField(auto_now=True),
41+
),
42+
]

polls/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class Poll(models.Model):
99
text = models.TextField()
1010
pub_date = models.DateTimeField(default=timezone.now)
1111
active = models.BooleanField(default=True)
12+
created_at = models.DateTimeField(auto_now_add=True)
1213

1314
def user_can_vote(self, user):
1415
"""
@@ -50,6 +51,8 @@ def __str__(self):
5051
class Choice(models.Model):
5152
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
5253
choice_text = models.CharField(max_length=255)
54+
created_at = models.DateTimeField(auto_now_add=True)
55+
updated_at = models.DateTimeField(auto_now=True)
5356

5457
@property
5558
def get_vote_count(self):
@@ -63,6 +66,8 @@ class Vote(models.Model):
6366
user = models.ForeignKey(User, on_delete=models.CASCADE)
6467
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
6568
choice = models.ForeignKey(Choice, on_delete=models.CASCADE)
69+
created_at = models.DateTimeField(auto_now_add=True)
70+
updated_at = models.DateTimeField(auto_now=True)
6671

6772
def __str__(self):
6873
return f'{self.poll.text[:15]} - {self.choice.choice_text[:15]} - {self.user.username}'

polls/templates/polls/poll_result.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
{% if poll.active %}
1919
<h3 class="mt-3 mb-3 text-center">Result for: {{ poll.text }}</h3>
2020
{% else %}
21-
<h3 class="mt-3 mb-3 text-center">"{{ poll.text }}" Has Ended Polling !</h3>
21+
<h3 class="mt-3 mb-3 text-center">"{{ poll.text }}" Has Ended Polling!</h3>
2222
{% endif %}
2323
<h3 class="mb-2 text-center">Total: {{ poll.get_vote_count }} votes</h3>
2424
<!-- progress bar -->

polls/templates/polls/polls_list.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<div class="container">
55
<div class="row">
66
<div class="col-md-8 offset-sm-2">
7-
<h1 class="text-center mt-3 mb-3">Welcome to polls List!</h1>
7+
<h1 class="text-center mb-5">Welcome to polls List!</h1>
88
{% if messages %}
99
<div class="messages">
1010
{% for message in messages %}
@@ -54,6 +54,7 @@ <h1 class="text-center mt-3 mb-3">Welcome to polls List!</h1>
5454

5555
{% endfor %}
5656
</ul>
57+
{% if polls.paginator.num_pages > 1 %}
5758
<nav class="mt-3">
5859
<ul class="pagination">
5960
{% if polls.has_previous %}
@@ -69,6 +70,7 @@ <h1 class="text-center mt-3 mb-3">Welcome to polls List!</h1>
6970
{% endif %}
7071
</ul>
7172
</nav>
73+
{% endif %}
7274
</div>
7375
</div>
7476
</div>

polls/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
path('add/', views.polls_add, name='add'),
1010
path('edit/<int:poll_id>/', views.polls_edit, name='edit'),
1111
path('delete/<int:poll_id>/', views.polls_delete, name='delete_poll'),
12-
path('end/<int:poll_id>/', views.endpoll, name='end_poll'),
12+
path('end/<int:poll_id>/', views.end_poll, name='end_poll'),
1313
path('edit/<int:poll_id>/choice/add/', views.add_choice, name='add_choice'),
1414
path('edit/choice/<int:choice_id>/', views.choice_edit, name='choice_edit'),
1515
path('delete/choice/<int:choice_id>/',

polls/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def polls_list(request):
3131

3232
get_dict_copy = request.GET.copy()
3333
params = get_dict_copy.pop('page', True) and get_dict_copy.urlencode()
34-
print(params)
34+
3535
context = {
3636
'polls': polls,
3737
'params': params,
@@ -63,9 +63,9 @@ def polls_add(request):
6363
poll = form.save(commit=False)
6464
poll.owner = request.user
6565
poll.save()
66-
new_choice1 = Choice(
66+
Choice(
6767
poll=poll, choice_text=form.cleaned_data['choice1']).save()
68-
new_choice2 = Choice(
68+
Choice(
6969
poll=poll, choice_text=form.cleaned_data['choice2']).save()
7070

7171
messages.success(
@@ -210,7 +210,7 @@ def poll_vote(request, poll_id):
210210

211211

212212
@login_required
213-
def endpoll(request, poll_id):
213+
def end_poll(request, poll_id):
214214
poll = get_object_or_404(Poll, pk=poll_id)
215215
if request.user != poll.owner:
216216
return redirect('home')

templates/includes/navbar.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<nav class="navbar navbar-expand-sm navbar-light bg-light">
1+
<nav class="navbar navbar-expand-sm navbar-light bg-light mb-5">
22
<a class="navbar-brand" href="{% url 'home' %}"><i class="fas fa-person-booth"></i></a>
33
<button class="navbar-toggler d-lg-none" type="button" data-toggle="collapse" data-target="#collapsibleNavId"
44
aria-controls="collapsibleNavId" aria-expanded="false" aria-label="Toggle navigation">

0 commit comments

Comments
 (0)