Django获得';子&x27;对象列表中的对象

Django获得';子&x27;对象列表中的对象,django,django-models,django-views,Django,Django Models,Django Views,我一直在解决从对象列表中检索“子”对象的问题: class BusinessLike(models.Model): user = models.ForeignKey(AppUser, related_name='user_business_likes') business = models.ForeignKey(Business, related_name='business_likes') class Meta: unique_together = ((

我一直在解决从对象列表中检索“子”对象的问题:

class BusinessLike(models.Model):
    user = models.ForeignKey(AppUser, related_name='user_business_likes')
    business = models.ForeignKey(Business, related_name='business_likes')
    class Meta:
        unique_together = (('user', 'business'),)

如何为
app\u user.user\u Business\u like
中的每个
'Business'
对象获取
'Business'
对象(无需循环列表并使用Business\u like.Business创建新列表)?

您可以使用

businesses = BusinessLike.objects.values('business')
businesses = BusinessLike.objects.values_list('business', flat=True)
但是,这不会给您一个对象列表,您只会得到一个外键ID列表

Django博士关于

如果您希望避免每次执行
类似业务的.business
,都有额外的查找,您可以使用
选择相关的

business_likes = BusinessLike.objects.select_related('business')
在这种情况下,当您在每个
BusinessLike
对象上循环并执行
BusinessLike.business
时,django将不再加入数据库,但它已缓存在内存中


.

如果您在视图中执行此操作,您可能会发现从
业务
模型开始创建新的查询集更容易

businesses = Business.objects.filter(business_likes__user=app_user)
我不确定您是否需要像这样创建业务化的
模型。您可以将多对多字段添加到
AppUser
模型(或者
Business
模型,如果您愿意的话)

Django将负责创建中间表,然后您可以执行如下查询:

businesses = app_user.business_likes.all()

如何将此外键列表添加到对象列表中?您可以执行另一个查找:
Business.objects.filter(id\uu in=ids)
,但它效率不高,我们通常不会这样做。因为如果你有一个类似于业务的
列表,这与拥有一个
业务的列表是一样的,因为你必须在某个点上循环它,对吗?嗯,不完全像我说的,这不是一回事,但是
中的
\u应该可以工作。你是对的,但我认为可能有一种美学的方法来做这件事。。谢谢!不,没有,或者你可以从
Business
模型中查找。什么是
app\u user。user\u Business\u喜欢
?你到底想做什么?你能提供更多细节吗!
businesses = app_user.business_likes.all()