从 Django 中的外键关系中获取数据 - 过滤
Fetch Data from ForeignKey Relationahip in Django - Filtering
我有两个模型:
class Card(BaseModel):
name = models.CharField(max_length=100, blank=True)
content = models.TextField(max_length=500)
mentioner = models.ForeignKey(Profile, related_name='Mentioner')
class Profile(BaseModel):
name = models.CharField(max_length=100)
card_mention = models.ForeignKey(Card, related_name='Mentionee')
当用户创建卡片时,他或她可以"mention"这张卡片中的另一个用户(作为提及者)。他或她实际上可以提及零个用户、他或她自己以及任意数量的其他用户(或者实际上是个人资料,因为用户和个人资料是相关联的)。
如果我将数据传递到模板的上下文中,我将如何在视图中进行设置,例如,以便我可以从卡片中获取上述配置文件?
换句话说,在模板中,假设我正在构建这些卡片的提要,并在其中提及。我想在卡片中(在模板中)列出所有提到的配置文件。我将如何为此目的获取这些配置文件?
我可能坚持使用某种过滤器。我可以获取所有配置文件对象,但是我需要一种方法来根据上述关系根据与每张卡片关联的配置文件进行过滤。
考虑重写您的模型,以便您使用 ManyToManyField
因为它更接近您的想法,即:
- 卡片只有一个作者(个人资料)
- 卡片可以提及零次或多次提及其他用户(个人资料)
因此您的代码将是:
class Card(BaseModel):
name = models.CharField(max_length=100, blank=True)
content = models.TextField(max_length=500)
author = models.ForeignKey(Profile, related_name='cards_authored')
mentions = models.ManyToManyField(Profile, related_name='cards_mentioned_in')
class Profile(BaseModel):
name = models.CharField(max_length=100)
这意味着您可以在视图中显示当前用户的所有提及:
def show_users_mentions(request):
user = request.user
mentions = Card.objects.filter(mentions=user)
# do something with mentions
或获取特定卡片上提到的所有用户:
def show_mentions_on_card(request,card_id):
card = Card.objects.get(pk=card_id)
mentions = card.mentions
# do something with mentions
我有两个模型:
class Card(BaseModel):
name = models.CharField(max_length=100, blank=True)
content = models.TextField(max_length=500)
mentioner = models.ForeignKey(Profile, related_name='Mentioner')
class Profile(BaseModel):
name = models.CharField(max_length=100)
card_mention = models.ForeignKey(Card, related_name='Mentionee')
当用户创建卡片时,他或她可以"mention"这张卡片中的另一个用户(作为提及者)。他或她实际上可以提及零个用户、他或她自己以及任意数量的其他用户(或者实际上是个人资料,因为用户和个人资料是相关联的)。
如果我将数据传递到模板的上下文中,我将如何在视图中进行设置,例如,以便我可以从卡片中获取上述配置文件?
换句话说,在模板中,假设我正在构建这些卡片的提要,并在其中提及。我想在卡片中(在模板中)列出所有提到的配置文件。我将如何为此目的获取这些配置文件?
我可能坚持使用某种过滤器。我可以获取所有配置文件对象,但是我需要一种方法来根据上述关系根据与每张卡片关联的配置文件进行过滤。
考虑重写您的模型,以便您使用 ManyToManyField
因为它更接近您的想法,即:
- 卡片只有一个作者(个人资料)
- 卡片可以提及零次或多次提及其他用户(个人资料)
因此您的代码将是:
class Card(BaseModel):
name = models.CharField(max_length=100, blank=True)
content = models.TextField(max_length=500)
author = models.ForeignKey(Profile, related_name='cards_authored')
mentions = models.ManyToManyField(Profile, related_name='cards_mentioned_in')
class Profile(BaseModel):
name = models.CharField(max_length=100)
这意味着您可以在视图中显示当前用户的所有提及:
def show_users_mentions(request):
user = request.user
mentions = Card.objects.filter(mentions=user)
# do something with mentions
或获取特定卡片上提到的所有用户:
def show_mentions_on_card(request,card_id):
card = Card.objects.get(pk=card_id)
mentions = card.mentions
# do something with mentions