0

Hit テーブルを使用して、すべての異なるモデル オブジェクトにアクセスしようとしています。私が理解していないのは、それを行うための実際のクエリを作成できない理由です。モデル 1-3.pk が hit.object_id である queryset_m1-m3 のすべてのオブジェクトを取得したいだけです。hit.object_id は Model1、2、または 3 の関連オブジェクトの主キーです。

def recently_viewed_proposals():
    hit = Hit.objects.all()
    queryset_m1 = Model1.objects.filter(pk=hit.object_id)
    queryset_m2 = Model2.objects.filter(pk=hit.object_id)
    queryset_m3 = Model3.objects.filter(pk=hit.object_id)
    hit_elements = chain(
        queryset_m1.random(len(queryset_m1)),
        queryset_m2.random(len(queryset_m2)),
        queryset_m3.random(len(queryset_m3))
    )
    elements_list = list(hit_elements)
    n_proposals = min(len(elements_list), config.MAX_RECENTLY_VIEWED_PROPOSALS)
    recently_viewed_proposals = random.sample(elements_list, n_proposals)
    return recently_viewed_proposals

これは、私の Hit モデル Class がどのように見えるかです:

...

class Hit(models.Model):
    content_type = models.ForeignKey(ContentType, limit_choices_to=hit_models, on_delete=models.CASCADE)
    object_id = models.CharField(max_length=36)
    content_object = GenericForeignKey('content_type', 'object_id')
    viewer = models.ForeignKey(User, verbose_name="Viewer", on_delete=models.CASCADE)
    counted = models.BooleanField(verbose_name="Counted", default=False, editable=True)
    date_added = models.DateTimeField(auto_now=True)

しかし、私は常に次の問題に陥っています。

「QuerySet」オブジェクトには属性「object_id」がありません

もちろん、フィールドを含む私のモデル1-3:

hits = GenericRelation(Hit, related_query_name='hit')

前もって感謝します

4

1 に答える 1