正如标题所说,我需要一种方法来执行此查询。我尝试过以下方法:
user_list_ids = []
user_lists = []
user_entries = OwnerEntry.objects.filter(name=request.user)
for user in user_entries:
user_list_ids.append(user.list_id)
user_lists = ListEntry.objects.filter(id__in=user_list_ids)
for user in user_entries:
user_list_ids.append(user.list_id)
user_lists = ListEntry.objects.filter(id__in=user_list_ids)
但是,我在最后一行收到错误:int()参数必须是字符串或数字,而不是' ListEntry'
以下是相关模型:
class OwnerEntry(models.Model):
name = models.CharField(max_length=32)
list_id = models.ForeignKey(ListEntry)
class Meta:
ordering = ('name',)
class ListEntry(models.Model):
name = models.CharField(max_length=64)
# active_date = models.DateTimeField('date of last list activity')
expire_date = models.DateField('date of expiration')
create_date = models.DateField('date created')
答案 0 :(得分:2)
直接回答您的问题,请注意您有一个list_id
而不是list
作为ForeignKey名称(OwnerEntry
型号)。为了实际提取fk值,您应该使用list_id_id
代替(或将list_id
重命名为list
;))
请注意,django支持对象引用,如下所示:
someowner = OwnerEntry.objects.get( ... )
ownerslist = someowner.listentry_set.all()
喝彩!
答案 1 :(得分:0)
您可以将OwnerEntry的外键定义为ListEntry:
list_id = models.ForeignKey(ListEntry, related_query_name='owner_entry')
然后在你的代码中执行此单行程序:
user_lists = ListEntry.objects.filter(owner_entry__name=request.user)
这样做恰好过滤每个ListEntry,它至少有一个owner_entry,其名称等于request.user's。 重新定义外键只是为了给查询属性一个好名字。
有关使用向后关系的查询的更多详细信息:https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships