Django反向过滤查询集外键示例不起作用

Posted

技术标签:

【中文标题】Django反向过滤查询集外键示例不起作用【英文标题】:Django Reverse Filter Queryset Foreign Key Example Not Working 【发布时间】:2020-05-29 07:31:54 【问题描述】:

我大致遵循此处列出的示例:

Django Queryset with filtering on reverse foreign key

型号:

class Site(models.Model):
    name = models.CharField(max_length=50)

class Profile(models.Model):
    Days = '1st'
    Mids = '2nd'
    Nights = '3rd'
    Work_Schedule_Choices = [
      (Days, 'Day Shift'),
      (Mids, 'Mid Shift'),
      (Nights, 'Night Shift'),
    ]  
    sitename = models.ForeignKey(Site, on_delete=models.CASCADE, related_name='profiles')
    title = models.CharField(max_length=100)
    schedule = models.CharField(max_length=3,choices=Work_Schedule_Choices,default=Days)
    totalusers = models.PositiveSmallIntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(50)])

观看次数:

def sitedetail(request):
site = Profile.objects.filter(id__in=Profile.sitename)
if request.method == 'GET':
    return render(request, 'App/site-detail.html', 'profile_set': Profile.objects.all(site))

当我加载页面时,它给出了一个 TypeError:

'ForwardManyToOneDescriptor' 对象不可迭代

有人可以帮助我了解我做错了什么吗?我看到多次引用同一个堆栈文章,所以我假设它是 Operator-Head-Space-Timing 错误:)

提前致谢。

【问题讨论】:

两个下划线id__in 好的,谢谢,为清楚起见进行了编辑。创建以下 TypeError:'ForwardManyToOneDescriptor' 对象不可迭代 【参考方案1】:

您需要获取网站:

from django.contrib.sites.shortcuts import get_current_site

def example_view(request):
    profiles = Profile.objects.filter(sitename=get_current_site(request))

【讨论】:

以上是关于Django反向过滤查询集外键示例不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个(Django)“过滤器”功能不起作用?

带有ajax的Django过滤器功能不起作用

按函数名称的 Django 反向基于类的视图不起作用

DateField 的 Django 模型过滤器不起作用

如果模板标签不起作用,则在 Django 中过滤

迁移后在 Django 上更改 db_table 不起作用,并且添加用户 (AbstractUser) 外键会破坏 __str__()