Django Timestampモデル(クラス継承)
Djangoでデータモデルを作成する場合、学習中に重複するフィールドを作成し続けるのは不便です.そこで,classの継承機能によりオーバーラップモデルのフィールドをモジュール化しようとする.
models.py (users)
だから私はまずutilsソフトを使います(調べてみると、普通はcoreというソフトでやっています.)utils appモデルにcreated at、updated atfieldを持つTimestampZoneというモデルが作成されました.
models.py(utils)作成したTimeStampZoneデータモデル
私はどうやってこれを知ったのか、私も知りたくありません.
上で作成したTimeStampZoneモデルを用いて,元に作成したアプリケーションのデータモデルを書き直した.
models.py(users)
完了したデータモデルの構造(正しいフィールドが表示されます).
models.py (users)
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(max_length=245, unique=True)
password = models.CharField(max_length=200)
phone_number = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "users"
models.py(postings)class Post(models.Model):
user = models.ForeignKey(User, on_delete=(models.CASCADE), related_name= "posts")
text = models.TextField(null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "posts"
class Image(models.Model):
image_url = models.URLField(max_length=2000)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="images")
class Meta:
db_table = "images"
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="comments")
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "comments"
上記のusersアプリケーションとpostingsアプリケーションのデータモデルによれば、データ生成時間を自動的に入力するcreated atフィールドと、データ修正時間を自動的に入力するupdated atフィールドが重なり続けることがわかります.だから私はまずutilsソフトを使います(調べてみると、普通はcoreというソフトでやっています.)utils appモデルにcreated at、updated atfieldを持つTimestampZoneというモデルが作成されました.
models.py(utils)作成したTimeStampZoneデータモデル
from django.db import models
class TimestampZone(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
このように、継承のために作成されたデータモデルは、継承しようとするデータモデル(TimestampZone)が継承しようとするデータベースに入らずにフィールドを正しく継承するために、メタデータクラスで=Trueを破棄する必要があります.私はどうやってこれを知ったのか、私も知りたくありません.
上で作成したTimeStampZoneモデルを用いて,元に作成したアプリケーションのデータモデルを書き直した.
models.py(users)
from utils.models import TimestampZone
class User(TimestampZone):
name = models.CharField(max_length=200)
email = models.CharField(max_length=200, unique=True)
password = models.CharField(max_length=2000)
phone_number = models.CharField(max_length=200)
class Meta:
db_table = "users"
models.py(postings)from users.models import User
from utils.models import TimestampZone
class Post(TimestampZone):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="posts")
content = models.TextField(null=True)
class Meta:
db_table = "posts"
class Image(TimestampZone):
image_url = models.CharField(max_length=2000)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="images")
class Meta:
db_table = "images"
class Comments(TimestampZone):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="comments")
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
content = models.CharField(max_length=2000)
class Meta:
db_table = "comments"
フィールドを繰り返すことなく、簡潔なデータモデルを作成できます.完了したデータモデルの構造(正しいフィールドが表示されます).
Reference
この問題について(Django Timestampモデル(クラス継承)), 我々は、より多くの情報をここで見つけました https://velog.io/@lob3767/Django-Timestamp-modelclass-상속テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol