diff --git a/typeidea/.vscode/settings.json b/typeidea/.vscode/settings.json
new file mode 100644
index 0000000..5e18a25
--- /dev/null
+++ b/typeidea/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "python.pythonPath": "F:\\DjangoProject\\env\\python.exe"
+}
\ No newline at end of file
diff --git a/typeidea/comment/admin.py b/typeidea/comment/admin.py
index 7179dc7..3722e92 100644
--- a/typeidea/comment/admin.py
+++ b/typeidea/comment/admin.py
@@ -1,12 +1,44 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
from django.contrib import admin
+from django.urls import reverse
+from django.utils.html import format_html
from .models import Comment
-from typeidea.custom_site import custom_site
-
+from .adminform import CommentAdminForms
+from typeidea.custom_site import comment_admin_site
+from typeidea.custom_admin import BaseOwnerAdmin
-@admin.register(Comment, site=custom_site)
+@admin.register(Comment, site=comment_admin_site)
class CommentAdmin(admin.ModelAdmin):
- list_display = ('target', 'nickname', 'content', 'website', 'created_time')
+ # 展示页面定制
+ list_display = [
+ 'post', 'content', 'nickname_show',
+ 'email', 'created_time', 'open_comment_website'
+ ]
+ list_filter = ['nickname', 'post', 'created_time']
+ search_fields = ['nickname', 'post']
+
+ date_hierarchy = 'created_time'
+
+ # 编辑页面定制
+ form = CommentAdminForms
+ save_on_top = False
+ save_on_bottom = True
+ fields = (
+ ('post', 'nickname'),
+ 'email',
+ 'content', 'websit'
+ )
+
+
+ def open_comment_website(self, obj):
+ return format_html(
+ '跳转至评论页',
+ reverse('comment_amdin:comment_comment_change', args=(obj.id,))
+ )
+ open_comment_website.short_description = '评论页'
+
+
+class CommentInlineAdmin(admin.TabularInline):
+ fields = ('nickname','content')
+ extra = 1
+ model = Comment
diff --git a/typeidea/comment/adminform.py b/typeidea/comment/adminform.py
new file mode 100644
index 0000000..2918791
--- /dev/null
+++ b/typeidea/comment/adminform.py
@@ -0,0 +1,5 @@
+from django import forms
+
+
+class CommentAdminForms(forms.ModelForm):
+ content = forms.CharField(widget=forms.Textarea, label='内容', required=False)
\ No newline at end of file
diff --git a/typeidea/comment/models.py b/typeidea/comment/models.py
index 407b8b9..a50b91f 100644
--- a/typeidea/comment/models.py
+++ b/typeidea/comment/models.py
@@ -1,25 +1,24 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
from django.db import models
+from django.contrib.auth.models import User
from blog.models import Post
class Comment(models.Model):
- STATUS_NORMAL = 1
- STATUS_DELETE = 0
- STATUS_ITEMS = (
- (STATUS_NORMAL, '正常'),
- (STATUS_DELETE, '删除'),
- )
- target = models.ForeignKey(Post, verbose_name="评论目标")
- content = models.CharField(max_length=2000, verbose_name="内容")
- nickname = models.CharField(max_length=50, verbose_name="昵称")
- website = models.URLField(verbose_name="网站")
- email = models.EmailField(verbose_name="邮箱")
- status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
- created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
+ post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name='文章')
+ content = models.CharField(max_length=2000, verbose_name='内容')
+ nickname = models.CharField(max_length=50, verbose_name='别名')
+ websit = models.URLField(verbose_name='网址')
+ email = models.EmailField(verbose_name='邮箱')
+ created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+
+ class Meta():
+ verbose_name = verbose_name_plural = '评论'
+
+ def __str__(self):
+ return '{}'.format(self.post.title)
+
+ def nickname_show(self):
+ return '来自{}的评论'.format(self.nickname)
+ nickname_show.short_description = '评论者'
- class Meta:
- verbose_name = verbose_name_plural = "评论"
diff --git a/typeidea/config/admin.py b/typeidea/config/admin.py
index b5bfde4..04a860a 100644
--- a/typeidea/config/admin.py
+++ b/typeidea/config/admin.py
@@ -1,28 +1,56 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
from django.contrib import admin
+from django.utils.html import format_html
+from django.urls import reverse
from .models import Link, SideBar
-from typeidea.custom_site import custom_site
-from typeidea.base_admin import BaseOwnerAdmin
+from config.adminform import ConfigLinkAdminForm, ConfigSideBarAdminForm
+from typeidea.custom_admin import BaseOwnerAdmin
+from typeidea.custom_site import config_admin_site
-@admin.register(Link, site=custom_site)
+@admin.register(Link, site=config_admin_site)
class LinkAdmin(BaseOwnerAdmin):
- list_display = ('title', 'href', 'status', 'weight', 'created_time')
- fields = ('title', 'href', 'status', 'weight')
-
- def save_model(self, request, obj, form, change):
- obj.owner = request.user
- return super(LinkAdmin, self).save_model(request, obj, form, change)
-
-
-@admin.register(SideBar, site=custom_site)
+ # 展示页面定制
+ list_display = [
+ 'title', 'href', 'weight', 'create_time', 'status_show', 'goahead_link'
+ ]
+ list_filter = ['title', 'create_time', 'weight']
+ search_fields = ['title', 'weight']
+
+ date_hierarchy = 'create_time'
+
+ # 编辑页面定制
+ form = ConfigLinkAdminForm
+ save_on_top = False
+ save_on_bottom = True
+ fields = (
+ 'title', 'weight', 'status', 'href'
+ )
+
+ def goahead_link(self, obj):
+ return format_html(
+ '编辑',
+ reverse('config_admin:config_link_change', args=(obj.id,))
+ )
+ goahead_link.short_description = '链接'
+
+
+@admin.register(SideBar, site=config_admin_site)
class SideBarAdmin(BaseOwnerAdmin):
- list_display = ('title', 'display_type', 'content', 'created_time')
- fields = ('title', 'display_type', 'content')
-
- def save_model(self, request, obj, form, change):
- obj.owner = request.user
- return super(SideBarAdmin, self).save_model(request, obj, form, change)
+ # 展示页面定制
+ list_display = [
+ 'title', 'display_type', 'content', 'created_time', 'status_show'
+ ]
+ list_filter = ['title', 'created_time', 'display_type']
+ search_fields = ['title', 'display_type', 'status']
+
+ date_hierarchy = 'created_time'
+
+ # 定义编辑页面
+ form = ConfigSideBarAdminForm
+ save_on_top = False
+ save_on_bottom = True
+
+ fields = (
+ 'title', 'display_type', 'content', 'status'
+ )
diff --git a/typeidea/config/adminform.py b/typeidea/config/adminform.py
new file mode 100644
index 0000000..47f04f5
--- /dev/null
+++ b/typeidea/config/adminform.py
@@ -0,0 +1,11 @@
+from django import forms
+
+
+class ConfigSideBarAdminForm(forms.ModelForm):
+ # status = forms.BooleanField(label='是否下线', required=False)
+ pass
+
+
+class ConfigLinkAdminForm(forms.ModelForm):
+ # status = forms.BooleanField(label='是否下线', required=False)
+ pass
\ No newline at end of file
diff --git a/typeidea/config/models.py b/typeidea/config/models.py
index b3efdce..4c1c7bd 100644
--- a/typeidea/config/models.py
+++ b/typeidea/config/models.py
@@ -1,41 +1,39 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.contrib.auth.models import User
from django.db import models
+from django.contrib.auth.models import User
class Link(models.Model):
- STATUS_NORMAL = 1
- STATUS_DELETE = 0
- STATUS_ITEMS = (
- (STATUS_NORMAL, '正常'),
- (STATUS_DELETE, '删除'),
+ STATUS_ITEM = (
+ (1, '正常'),
+ (2, '删除'),
)
- title = models.CharField(max_length=50, verbose_name="标题")
- href = models.URLField(verbose_name="链接") # 默认长度200
- status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
+ title = models.CharField(max_length=50, verbose_name='标题')
+ href = models.URLField(verbose_name='链接')
+ status = models.PositiveIntegerField(default=1, choices=STATUS_ITEM, verbose_name='状态')
weight = models.PositiveIntegerField(default=1, choices=zip(range(1, 6), range(1, 6)),
- verbose_name="权重",
- help_text="权重高展示顺序靠前")
-
- owner = models.ForeignKey(User, verbose_name="作者")
- created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
+ verbose_name='权重',
+ help_text='权重越高展示顺序越靠前')
+
+ owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
+ create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
- class Meta:
- verbose_name = verbose_name_plural = "友链"
+ class Meta():
+ verbose_name = verbose_name_plural = '友链'
def __str__(self):
return self.title
+ def status_show(self):
+ return '当前状态{}'.format(self.status)
+ status_show.short_description = '状态'
+
class SideBar(models.Model):
- STATUS_SHOW = 1
- STATUS_HIDE = 0
- STATUS_ITEMS = (
- (STATUS_SHOW, '展示'),
- (STATUS_HIDE, '隐藏'),
+ STATUS_ITEM = (
+ (1, '正常'),
+ (2, '下线')
)
+
SIDE_TYPE = (
(1, 'HTML'),
(2, '最新文章'),
@@ -43,17 +41,21 @@ class SideBar(models.Model):
(4, '最近评论'),
)
title = models.CharField(max_length=50, verbose_name="标题")
- display_type = models.PositiveIntegerField(default=1, choices=SIDE_TYPE,
- verbose_name="展示类型")
- content = models.CharField(max_length=500, blank=True, verbose_name="内容",
- help_text="如果设置的不是HTML类型,可为空")
-
- status = models.PositiveIntegerField(default=STATUS_SHOW, choices=STATUS_ITEMS, verbose_name="状态")
- owner = models.ForeignKey(User, verbose_name="作者")
- created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
-
- class Meta:
- verbose_name = verbose_name_plural = "侧边栏"
-
+ display_type = models.PositiveIntegerField(default=1, choices=SIDE_TYPE, verbose_name='展示类型')
+ content = models.CharField(max_length=500, blank=True, verbose_name='内容',
+ help_text='如果设置的不是HTML类型,可为空')
+
+ status = models.PositiveIntegerField(default=1, choices=STATUS_ITEM, verbose_name='状态')
+
+ owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
+ created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+
+ class Meta():
+ verbose_name = verbose_name_plural = '侧边栏'
+
+ def status_show(self):
+ return '当前状态{}'.format(self.status)
+ status_show.short_description = '状态'
+
def __str__(self):
- return self.title
+ return self.title
\ No newline at end of file
diff --git a/typeidea/typeidea/base_admin.py b/typeidea/typeidea/custom_admin.py
similarity index 63%
rename from typeidea/typeidea/base_admin.py
rename to typeidea/typeidea/custom_admin.py
index deacd8e..4e36189 100644
--- a/typeidea/typeidea/base_admin.py
+++ b/typeidea/typeidea/custom_admin.py
@@ -2,16 +2,10 @@
class BaseOwnerAdmin(admin.ModelAdmin):
- """
- 1. 用来处理文章、分类、标签、侧边栏、友链这些model的owner字段自动补充
- 2. 用来针对queryset过滤当前用户的数据
- """
- exclude = ('owner', )
-
def get_queryset(self, request):
qs = super(BaseOwnerAdmin, self).get_queryset(request)
return qs.filter(owner=request.user)
def save_model(self, request, obj, form, change):
obj.owner = request.user
- return super(BaseOwnerAdmin, self).save_model(request, obj, form, change)
+ return super(BaseOwnerAdmin, self).save_model(request, obj, form, change)
\ No newline at end of file
diff --git a/typeidea/typeidea/custom_site.py b/typeidea/typeidea/custom_site.py
index 83a2f99..7802352 100644
--- a/typeidea/typeidea/custom_site.py
+++ b/typeidea/typeidea/custom_site.py
@@ -1,10 +1,24 @@
from django.contrib.admin import AdminSite
-class CustomSite(AdminSite):
- site_header = 'Typeidea'
- site_title = 'Typeidea管理后台'
+class PostAdminSite(AdminSite):
+ site_header = '文章管理'
+ site_title = '文章管理后台'
index_title = '首页'
-custom_site = CustomSite(name='cus_admin')
+class CommentAdminSite(AdminSite):
+ site_header = '评论管理'
+ site_title = '评论管理后台'
+ index_title = '首页'
+
+
+class ConfigAdminSite(AdminSite):
+ site_header = '配置管理'
+ site_title = '配置管理后台'
+ index_title = '首页'
+
+
+post_admin_site = PostAdminSite(name='post_admin')
+comment_admin_site = CommentAdminSite(name='comment_amdin')
+config_admin_site = ConfigAdminSite(name='config_admin')
\ No newline at end of file
diff --git a/typeidea/typeidea/urls.py b/typeidea/typeidea/urls.py
index c39504f..04fe263 100644
--- a/typeidea/typeidea/urls.py
+++ b/typeidea/typeidea/urls.py
@@ -1,9 +1,26 @@
-from django.conf.urls import url
+"""typeidea URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/2.2/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.urls import include, path
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
+"""
from django.contrib import admin
+from django.urls import path
+from .custom_site import post_admin_site, comment_admin_site, config_admin_site
-from .custom_site import custom_site
urlpatterns = [
- url(r'^super_admin/', admin.site.urls),
- url(r'^admin/', custom_site.urls),
+ path('admin/', admin.site.urls),
+ path('post_admin/', post_admin_site.urls),
+ path('comment_admin/', comment_admin_site.urls),
+ path('config_admin/', config_admin_site.urls)
]