跨多个模型关系的 Django 查询

Django Query across multiple model relationships

我正在尝试查询按组过滤的 ActivityPartsModel 中的一组实例。当我尝试 运行 以下内容时。我留下了一个属性错误:“'QuerySet' 对象没有属性 'activity'”

activities = GroupActivityModel.objects.filter(group=id)
parts = ActivityPartModel.objects.filter(activity=activities.activity.all())
print(parts)

我将如何使用 GroupModel 过滤 ActivityPartModel ID/instance

class ActivityModel(models.Model):
    activityName = models.CharField(max_length=100)
    description = models.CharField(max_length=200)
    workCenter = models.ForeignKey(Group, on_delete=models.PROTECT)
    history = HistoricalRecords()

class ActivityPartModel(models.Model):
    activity = models.ForeignKey(ActivityModel, on_delete=models.PROTECT)
    part = models.ForeignKey(PartModel, on_delete=models.PROTECT)
    quantity = models.IntegerField(default=1)
    increment = models.BooleanField(default=False)  # TRUE/FALSE used to represent parts ActivityPartModel/produced
    order = models.IntegerField(blank=False, default=100_000)
    location = models.TextField(max_length=50, null=True)
    history = HistoricalRecords()

class GroupModel(models.Model):
    groupName = models.CharField(max_length=50)

class GroupActivityModel(models.Model):
    group = models.ForeignKey(GroupModel, on_delete=models.PROTECT)
    activity = models.ForeignKey(ActivityModel, on_delete=models.PROTECT)
    order = models.IntegerField(blank=False, default=100_000)
    groupName = models.CharField(max_length=50)

试试这个:

activities = GroupActivityModel.objects.filter(group=id).values_list('activity', flat=True)
parts = ActivityPartModel.objects.filter(activity__in=activities)
print(parts)

因为 activity 是模型对象的属性,您不能从查询集对象调用模型对象的属性(我的意思是行 activity=activities.activity.all())。这就是为什么您会看到 QuerySet' object has no attribute 'activity'".