Django3.1です。

ポリモーフィック関連を表現したい場合、GenericForeignKey, GenericRelation, ContentTypeを使う

モデル定義

from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelaton
from django.contrib.contenttypes.models import ContentType
from django.db import models

class Attachment(models.Model):
    ``` 添付ファイル ```
    src = models.FileField(null=False)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.IntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')


class Entry(models.Model):
    ``` エントリ ```
    title = models.CharField(max_length=255)
    body = models.TextField()

    attachments = GenericRelation(Attachment)

class Comment(models.Model):
    ``` エントリに対するコメント ```
    body = models.TextField()
   
    attachments = GenericRelation(Attachment)

参照

entry = Entry.objects.first()
# create
entry.attachments.create(src=file_obj)
# load
entry.attachments.first().src.file.read()

comment = Comment.objects.first()
# create
comment.attachments.create(src=file_obj)
# load
comments.attachments.first().src.file.read()
Udemy 独学でのアプリ開発に限界を感じたら

プログラミング初学者の皆さんに、 Udemy を強くお勧めしたいと思います。 Udemy は世界中のトップレベルのプログラミング講師が提供するオンライン講座を取り揃えています。以下は、 Udemy で学ぶことのメリットについての詳細です。

1. Udemy の豊富なコースの選択肢

Udemyには、数千ものコースがあります。初心者から上級者まで、プログラミングのあらゆるレベルを網羅しています。また、様々なプログラミング言語やツールに関するコースも多数あり、希望に合わせたコースを選ぶことができます。

2. 実践的な学習方法

Udemyのコースは、理論だけでなく実践的な学習も行えます。多くのコースには、プログラムの作成や実際のプロジェクトに取り組む演習が含まれています。これにより、理論だけでなく実践的なスキルも身につけることができます。

3. Udemy には質の高い講師陣

Udemyの講師陣には、世界中のトップレベルのプログラマーが多数在籍しています。彼らは、実務での経験を活かして、分かりやすい講義を行っています。

4. 初学者が始めるのにとても手頃な価格

Udemyのコースは、他のオンライン講座と比べて手頃な価格で提供されています。また、一度購入すると、終身アクセスが得られるので、自分のペースで学習することができます。

以上の理由から、プログラミング初学者の方には、Udemyが最適な学習プラットフォームであると考えられます。ぜひ一度、Udemyのコースを体験してみてください。


ウェブ開発の人気オンラインコース


ITとソフトウェアの人気オンラインコース


デザインの人気オンラインコース