Django新手,所以如果这是超级直接的我道歉。
我试图获得一份不同的名单"名称"来自"活动"的列表中的值给定的" Person"。
模型设置如下
class Activity(models.Model):
Visit = models.ForeignKey(Visit)
Person = models.ForeignKey(Person)
Provider = models.ForeignKey(Provider)
ActivityType = models.ForeignKey(ActivityType)
Time_Spent = models.IntegerField(blank=True, null=True)
Repetitions = models.CharField(max_length=20, blank=True, null=True)
Weight_Resistance = models.CharField(max_length=50, blank=True, null=True)
Notes = models.CharField(max_length=500, blank=True, null=True)
class ActivityType(models.Model):
Name = models.CharField(max_length=100)
Activity_Category = models.CharField(max_length=40, choices=Activity_Category_Choices)
Location_Category = models.CharField(max_length=30, blank=True, null=True, choices=Location_Category_Choices)
我可以列出使用给定人员完成的所有活动
person = Person.objects.get(id=person_id)
activity_list = person.activity_set.all()
我得到了该人的所有活动清单,没问题。
我能解决的是如何生成在person.activity_set.all()中找到的不同/唯一Activity_Types列表。
person.activity_set.values('ActivityType').distinct()
仅返回带有
的字典{'ActivityType':<activitytype.id>}
我无法理解如何直接访问ActivityType
上的name属性这在普通的&ol;中很简单。 SQL,所以我知道我缺乏对ORM的研究是罪魁祸首。
感谢。
更新:我有这个工作,但是这样做是正确的(tm)这样做..
distinct_activities = person.activity_set.values('ActivityType').distinct()
uniquelist = []
for x in distinct_activities:
valuetofind = x['ActivityType']
activitytype = ActivityType.objects.get(id=valuetofind)
name = activitytype.Name
uniquelist.append((valuetofind, name))
然后迭代那个无边无际的人......
这一定是错的......
答案 0 :(得分:1)
unique_names = ActivityType.objects.filter(
id__in=Activity.objects.filter(person=your_person).values_list('ActivityType__id', flat=True).distinct().values_list('Name', flat=True).distinct()
这应该可以解决问题。也不会有很多db命中。 从我的手机写下来,所以关心错别字。