Skip to content

Commit b03a93c

Browse files
committed
Add Newspaper App
1 parent 9cf839e commit b03a93c

29 files changed

+812
-0
lines changed

newspaper/articles/__init__.py

Whitespace-only changes.

newspaper/articles/admin.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.contrib import admin
2+
from .models import Article, Comment
3+
4+
# Register your models here.
5+
6+
admin.site.register(Article)
7+
admin.site.register(Comment)

newspaper/articles/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ArticlesConfig(AppConfig):
5+
default_auto_field = "django.db.models.BigAutoField"
6+
name = "articles"

newspaper/articles/forms.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django import forms
2+
from .models import Article, Comment
3+
4+
5+
class ArticleForm(forms.ModelForm):
6+
class Meta:
7+
model = Article
8+
fields = ["title", "body"]
9+
10+
11+
class CommentForm(forms.ModelForm):
12+
13+
class Meta:
14+
model = Comment
15+
fields = ("content",)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Generated by Django 5.2.4 on 2025-07-22 04:24
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name="Article",
19+
fields=[
20+
(
21+
"id",
22+
models.BigAutoField(
23+
auto_created=True,
24+
primary_key=True,
25+
serialize=False,
26+
verbose_name="ID",
27+
),
28+
),
29+
("title", models.CharField(max_length=100)),
30+
("body", models.TextField()),
31+
("create_at", models.DateTimeField(auto_now_add=True)),
32+
(
33+
"author",
34+
models.ForeignKey(
35+
on_delete=django.db.models.deletion.CASCADE,
36+
to=settings.AUTH_USER_MODEL,
37+
),
38+
),
39+
],
40+
),
41+
]
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Generated by Django 5.2.4 on 2025-07-22 08:04
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
("articles", "0001_initial"),
12+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name="Comment",
18+
fields=[
19+
(
20+
"id",
21+
models.BigAutoField(
22+
auto_created=True,
23+
primary_key=True,
24+
serialize=False,
25+
verbose_name="ID",
26+
),
27+
),
28+
("date", models.DateTimeField(auto_now_add=True)),
29+
("content", models.CharField(max_length=100)),
30+
(
31+
"writer",
32+
models.ForeignKey(
33+
on_delete=django.db.models.deletion.CASCADE,
34+
to=settings.AUTH_USER_MODEL,
35+
),
36+
),
37+
],
38+
),
39+
]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 5.2.4 on 2025-07-22 08:12
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("articles", "0002_comment"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="comment",
16+
name="article",
17+
field=models.ForeignKey(
18+
null=True,
19+
on_delete=django.db.models.deletion.CASCADE,
20+
to="articles.article",
21+
),
22+
),
23+
]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 5.2.4 on 2025-07-22 08:28
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("articles", "0003_comment_article"),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name="comment",
16+
name="article",
17+
field=models.ForeignKey(
18+
null=True,
19+
on_delete=django.db.models.deletion.CASCADE,
20+
related_name="comments",
21+
to="articles.article",
22+
),
23+
),
24+
]

newspaper/articles/migrations/__init__.py

Whitespace-only changes.

newspaper/articles/models.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from django.db import models
2+
from django.contrib.auth.models import User
3+
from django.urls import reverse
4+
5+
# Create your models here.
6+
7+
8+
class Article(models.Model):
9+
10+
title = models.CharField(max_length=100)
11+
body = models.TextField()
12+
author = models.ForeignKey(User, on_delete=models.CASCADE)
13+
create_at = models.DateTimeField(auto_now_add=True) # Add Date Automatically
14+
15+
def __str__(self):
16+
return self.title
17+
18+
19+
class Comment(models.Model):
20+
21+
article = models.ForeignKey(
22+
Article,
23+
null=True,
24+
blank=False,
25+
on_delete=models.CASCADE,
26+
related_name="comments",
27+
)
28+
writer = models.ForeignKey(User, on_delete=models.CASCADE)
29+
content = models.CharField(max_length=100)
30+
date = models.DateTimeField(auto_now_add=True)
31+
32+
illegal_words = ["Fuck", "Ugly", "Bad"]
33+
34+
def filter_illegal_words(self, text):
35+
for word in self.illegal_words:
36+
if word.lower() in text.lower():
37+
masked = "*" * len(word)
38+
text = text.replace(word.lower(), masked).replace(
39+
word.capitalize(), masked
40+
)
41+
return text
42+
43+
def save(self, *args, **kwargs):
44+
self.content = self.filter_illegal_words(self.content)
45+
super().save(*args, **kwargs)
46+
47+
def __str__(self):
48+
return self.content
49+
50+
def get_absolute_url(self):
51+
return reverse("article_details", kwargs={"pk": self.article.pk})

0 commit comments

Comments
 (0)