1. 程式人生 > >Django2.0之bbs登入功能

Django2.0之bbs登入功能

  • 表結構:
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'