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()