私はDjangoにかなり慣れていないので、今は抽象モデルの使用法を理解しようとしています。ブログサービスを作成していて、認証されたユーザーと匿名ユーザーの両方がブログの投稿にコメントできるようにしたいとします。
認証されたユーザー(特定のユーザーを参照するための外部キーを持っているだけ)にとってシナリオは非常に簡単ですが、sだけでなくsまたはsの場合Authors
はそれほど単純ではありません。User
AnonymousAuthor
RegisteredAuthor
ここでの直接的なアプローチは、クラスの階層を構築することです。
class Author(models.Model):
class Meta:
abstract = True
class AnonymousAuthor(Author):
name = models.CharField(max_length=128)
def display_name(self):
return self.name
class RegisteredAuthor(Author):
user = models.ForeignKey(User)
def display_name(self):
return self.user.user_name
そして、BlogPostComment
次のように定義できます。
class BlogPostComment(models.Model):
author = models.ForeignKey(Author)
...
このアプローチが好きなのは、作成者が誰であっても、BlogPostComment
セットを繰り返してそれぞれを呼び出すだけで、コメントのリストを簡単に作成できるdisplay_name()
からです。ここでの唯一の問題は、それが機能しないことです。Djangoのコメント:
AssertionError: ForeignKey cannot define a relation with abstract class Author
ここでの解決策は何ですか?
アップデート
私は一般的な関係がここで役立つことを知っています。しかし、それが唯一の解決策ですか?やり過ぎのように感じます。