Django newbie、これは超直筆なら大変申し訳ありません。Django:外来キーモデルから別の値を取得
"Person"の "Activity"のリストから別個の "Name"値のリストを取得しようとしています。
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属性にまっすぐに進む方法を整理することができません
これはプレーンオールのSQLではかなり簡単ですので、ORMをgrokingしていないことは責任があることを知っています。
ありがとうございました。
アップデート:私は一種の、この作業を持っているが、これは、これを行うための正しい方法(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))
そしてそのuniquelistを反復...
これは間違っている必要があります...
djangoのドキュメント https://docs.djangoproject.com/el/1.10/ref/models/querysets/#distinct –
申し訳ありませんが、私はそれを試みたことがあります。問題は、.distinct()を介してActivityType情報にアクセスできないことです.Iidは取得できますが、名前は取得できません。私はそれが間違った方法であるかどうか疑問に思いました。 – Gradatc