我对 Django 很陌生,现在我正在尝试了解抽象模型的使用。假设您正在编写一个博客服务,并且您希望经过身份验证的用户和匿名用户都能够评论博客文章。
虽然场景对于经过身份验证的用户来说非常简单(只有一个外键来引用特定用户),但当Authors
不仅仅是User
s 而是AnonymousAuthor
s 或RegisteredAuthor
s 时,情况就不是那么简单了。
这里的直接方法是构建类的层次结构:
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
s 集并调用display_name()
每个评论来构建评论列表。这里唯一的问题是它不起作用。姜戈 说:
AssertionError: ForeignKey cannot define a relation with abstract class Author
这里有什么解决方案?
更新
我知道通用关系在这里可以提供帮助。但它是唯一的解决方案吗?感觉有点矫枉过正。