Django2.0之bbs登入功能
阿新 • • 發佈:2018-12-27
- 表結構:
from django.contrib.auth.models import AbstractUser
from django.db import models
# Create your models here.
class AuthorInfo(AbstractUser):
"""
使用者資訊表
"""
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True)
avatar = models.FileField(upload_to="avatars/" , default="avatars/default.png")
blog = models.OneToOneField(to="Blog", to_field="nid", null=True, on_delete=models.CASCADE)
def __str__(self):
return self.username
class Meta:
verbose_name = "使用者資訊"
verbose_name_plural = verbose_name
class Blog(models.Model):
"""
部落格資訊
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=64) # 個人部落格標題
theme = models.CharField(max_length=32) # 部落格主題
def __str__(self):
return self.title
class Meta:
verbose_name = "部落格"
verbose_name_plural = verbose_name
class Category(models.Model):
"""
個人部落格文章分類
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32) # 分類標題
blog = models.ForeignKey(to="Blog", to_field="nid", on_delete=models.CASCADE) # 外來鍵關聯部落格,一個部落格站點可以有多個分類
def __str__(self):
return "{}-{}".format(self.blog.title, self.title)
class Meta:
verbose_name = "文章分類"
verbose_name_plural = verbose_name
class Tag(models.Model):
"""
標籤
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32) # 標籤名
blog = models.ForeignKey(to="Blog", to_field="nid", on_delete=models.CASCADE) # 所屬部落格
def __str__(self):
return self.title
class Meta:
verbose_name = "標籤"
verbose_name_plural = verbose_name
class Article(models.Model):
"""
文章
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=50, verbose_name="標題") # 文章標題
desc = models.CharField(max_length=255) # 文章描述
create_time = models.DateTimeField(auto_now_add=True) # 建立時間
category = models.ForeignKey(to="Category", to_field="nid", null=True, on_delete=models.CASCADE)
user = models.ForeignKey(to="AuthorInfo", to_field="nid", on_delete=models.CASCADE)
# 評論數
comment_count = models.IntegerField(default=0)
# 點贊數
up_count = models.IntegerField(default=0)
# 反對數
down_count = models.IntegerField(default=0)
tags = models.ManyToManyField(
to="Tag",
through="Article2Tag",
through_fields=("article", "tag"),
)
def __str__(self):
return self.title
class Meta:
verbose_name = "文章"
verbose_name_plural = verbose_name
class ArticleDetail(models.Model):
"""
文章詳情表
"""
nid = models.AutoField(primary_key=True)
content = models.TextField()
article = models.OneToOneField(to="Article", to_field="nid", on_delete=models.CASCADE)
class Meta:
verbose_name = "文章詳情"
verbose_name_plural = verbose_name
class Article2Tag(models.Model):
"""
文章和標籤的多對多關係表
"""
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(to="Article", to_field="nid", on_delete=models.CASCADE)
tag = models.ForeignKey(to="Tag", to_field="nid", on_delete=models.CASCADE)
def __str__(self):
return "{}-{}".format(self.article, self.tag)
class Meta:
unique_together = (("article", "tag"),)
verbose_name = "文章-標籤"
verbose_name_plural = verbose_name
class ArticleThumbsUp(models.Model):
"""
點贊表
"""
nid = models.AutoField(primary_key=True)
user = models.ForeignKey(to="AuthorInfo", null=True, on_delete=models.CASCADE)
article = models.ForeignKey(to="Article", null=True, on_delete=models.CASCADE)
is_up = models.BooleanField(default=True)
class Meta:
unique_together = (("article", "user"),)
verbose_name = "點贊"
verbose_name_plural = verbose_name
class Comment(models.Model):
"""
評論表
"""
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(to="Article", to_field="nid", on_delete=models.CASCADE)
user = models.ForeignKey(to="AuthorInfo", to_field="nid", on_delete=models.CASCADE)
content = models.CharField(max_length=255) # 評論內容
create_time = models.DateTimeField(auto_now_add=True)
parent_comment = models.ForeignKey("self", null=True, on_delete=models.CASCADE)
def __str__(self):
return self.content
class Meta:
verbose_name = "評論"
verbose_name_plural = verbose_name
- 資料庫遷移:
python3 manage.py makemigations
這時會報個錯誤:
ERRORS:
auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'AuthorInfo.groups'.
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'AuthorInfo.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'AuthorIn
fo.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'AuthorInfo.user_permissions'
.
login_func.AuthorInfo.groups: (fields.E304) Reverse accessor for 'AuthorInfo.groups' clashes with reverse accessor for 'User.group
s'.
HINT: Add or change a related_name argument to the definition for 'AuthorInfo.groups' or 'User.groups'.
login_func.AuthorInfo.user_permissions: (fields.E304) Reverse accessor for 'AuthorInfo.user_permissions' clashes with reverse acce
ssor for 'User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'AuthorInfo.user_permissions' or 'User.user_permissions'
解決方案:
在settings.py中
AUTH_USER_MODEL = '建立app的名字.AuthorInfo'