Commit f2e155f6 authored by Jonathan Talbot's avatar Jonathan Talbot

Merge branch 'devera/announcements' into 'main'

final project

See merge request !16
parents 5b7d8393 0a6e74f3
......@@ -7,17 +7,16 @@ class ReactionInline(admin.TabularInline):
class AnnouncementAdmin(admin.ModelAdmin):
model = Announcement
search_fields = ('announcement_title', 'announcement_body', 'authors_First_Name', 'authors_Last_Name')
list_display = ('announcement_title', 'announcement_body', 'authors_First_Name', 'authors_Last_Name')
list_filter = ('announcement_title', 'announcement_body', 'authors_First_Name', 'authors_Last_Name')
search_fields = ('announcement_title', 'announcement_body', 'author')
list_display = ('announcement_title', 'announcement_body', 'author')
list_filter = ('announcement_title', 'announcement_body', 'author')
fieldsets = [
('Announcement Data', {
'fields': [
'announcement_title',
'announcement_body',
'authors_First_Name',
'authors_Last_Name'
'author'
]
})
]
......
from django.forms import ModelForm
from .models import Announcement
class AnnouncementForm(ModelForm):
class Meta:
model = Announcement
fields = ['announcement_title', 'announcement_body', 'author'] # Selected fields for the form
\ No newline at end of file
# Generated by Django 4.0.3 on 2022-05-23 04:10
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('homepage', '__first__'),
('announcements', '0002_remove_announcement_reaction_reaction_announcement'),
]
operations = [
migrations.RemoveField(
model_name='announcement',
name='authors_First_Name',
),
migrations.RemoveField(
model_name='announcement',
name='authors_Last_Name',
),
migrations.AddField(
model_name='announcement',
name='author',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='homepage.widgetuser'),
),
]
......@@ -2,12 +2,14 @@ from django.db import models
from django.urls import reverse
from django.core.validators import RegexValidator
# Using WidgetUser from homepage
from homepage.models import WidgetUser
class Announcement(models.Model):
announcement_title= models.CharField(max_length=50)
announcement_body = models.CharField(max_length=200)
authors_First_Name = models.CharField(max_length=20)
authors_Last_Name = models.CharField(max_length=20)
author = models.ForeignKey(WidgetUser, on_delete=models.CASCADE, default=1)
pub_date = models.DateTimeField(auto_now_add=True, editable=False)
def get_absolute_url(self):
......
......@@ -8,7 +8,7 @@
</head>
<body>
<h2>{{ announcement.announcement_title }}</h2>
<h3>by {{ announcement.First_Name }} {{ announcement.Last_Name }}, {{ announcement.pub_date|date:"d/m/yy" }}</h3>
<h3>by {{ announcement.author.first_name }} {{ announcement.author.last_name }}, {{ announcement.pub_date|date:"d/m/yy" }}</h3>
<p>{{ announcement.announcement_body }}</p>
<hr>
{% for reaction in reactions %}
......@@ -16,5 +16,7 @@
<p>{{ reaction.reaction_name }} : {{ reaction.tally }}</p>
{%endif%}
{% endfor %}
<hr>
<a href="{% url 'announcement-list' %}">Back to Announcements</a>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add Announcement</title>
</head>
<body>
<h1>Add Announcement</h1>
<hr>
<form action="{% url 'announcement-add' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save Announcement">
</form>
<hr>
<a href="{% url 'announcement-list' %}">Back to Announcements</a>
</body>
</html>
\ No newline at end of file
......@@ -8,9 +8,17 @@
</head>
<body>
<h1>Important Announcements:</h1>
{% for announcement in announcements %}
<a href="{{ announcement.get_absolute_url }}">{{ announcement.announcement_title }} by {{ announcement.authors_First_Name }} {{ announcement.authors_Last_Name }} dated {{ announcement.pub_date }}</a>
<br>
{% endfor %}
<hr>
{% if announcements %}
<ul>
{% for announcement in announcements %}
<li><a href="{{ announcement.get_absolute_url }}">{{ announcement.announcement_title }} by {{ announcement.author.first_name }} {{ announcement.author.last_name }} dated {{ announcement.pub_date }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>There are no announcements.</p>
{% endif %}
<hr>
<a href="{% url 'announcement-add' %}"><button>Add Announcement</button></a>
</body>
</html>
\ No newline at end of file
from django.urls import path
from .views import AnnouncementListView, AnnouncementDetailView
from .views import AnnouncementListView, AnnouncementDetailView, addAnnouncement
urlpatterns = [
path('', AnnouncementListView.as_view(), name='announcement-list'),
path('<int:pk>/details', AnnouncementDetailView, name='announcement-detail'),
path('add/', addAnnouncement, name='announcement-add'),
]
\ No newline at end of file
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.shortcuts import render, get_object_or_404, redirect
from django.views import View
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from .models import Announcement, Reaction
# def announcements(request):
# announcements = Announcement.objects.all()
# reactions = Reaction.objects.all()
# output = "ANNOUNCEMENTS:\n" + "\n".join(
# ['{} by {} {} dated by {}: \n {} \n'.format(
# str(announcement.announcement_title),
# str(announcement.authors_First_Name),
# str(announcement.authors_Last_Name),
# str(announcement.pub_date),
# str(announcement.announcement_body),
# )
# for announcement in announcements]
# ) + "REACTIONS:\n" + "\n".join(
# ['{}: {} \n {}: {} \n {}: {}'.format(
# str(reaction.reaction_name1),
# str(reaction.tally1),
# str(reaction.reaction_name2),
# str(reaction.tally2),
# str(reaction.reaction_name3),
# str(reaction.tally3),
# )
# for reaction in reactions]
# )
# return HttpResponse(output, content_type="text/plain")
from .forms import AnnouncementForm
class AnnouncementListView(View):
def get(self, request):
announcements = Announcement.objects.order_by('pub_date').all()
announcements = Announcement.objects.order_by('-pub_date').all()
context = {
'announcements': announcements,
}
......@@ -47,3 +20,15 @@ def AnnouncementDetailView(request, pk):
'announcement': announcement,
'reactions': reactions
})
def addAnnouncement(request):
form = AnnouncementForm()
if request.method == 'POST':
form = AnnouncementForm(request.POST)
if form.is_valid():
new_announcement = form.save() # Creates new widget user
return redirect('announcement-detail', pk=new_announcement.pk) # Redirects to detailed view of new widget user
else:
form = AnnouncementForm()
context = {'form':form}
return render(request,'announcements/announcements_form.html', context)
No preview for this file type
# Generated by Django 4.0.3 on 2022-05-23 04:10
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('forum', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='post',
name='post_body',
field=models.CharField(max_length=1000, verbose_name='Body'),
),
migrations.AlterField(
model_name='post',
name='post_title',
field=models.CharField(max_length=100, verbose_name='Title'),
),
migrations.AlterField(
model_name='reply',
name='replied_post',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='forum.post'),
),
migrations.AlterField(
model_name='reply',
name='reply_body',
field=models.CharField(max_length=500),
),
]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment