Содержится с идентификатором по умолчанию в качестве параметра не работает - PullRequest
1 голос
/ 11 апреля 2019

Я хочу проверить, находится ли идентификатор страницы упражнений внутри массива для розыгрыша решенных упражнений.Я подумал, что это может быть легко сделать с contains_by, но это не работает.

Я пробовал эту строку (но я также хочу рандомизировать вопросы)

randomQuestions = Exercises.objects.filter(id__contained_by=(req.user.profile.exercitiiProvocari).order_by("?")

но это не работаетЯ получаю эту ошибку:

Unsupported lookup 'contained_by' for AutoField or join on the field not permitted, perhaps you meant contains or icontains?

Я полагаю, эта ошибка связана с тем, что ID является автоматически сгенерированным полем django, но я не знаю, как это исправить.

views.py

from django.shortcuts import render
from exercitii.models import Exercises 

# Create your views here.
def index(req):
    return render(req, "../templates/pagini/provocari.html")

def provocari(req):
    randomQuestions = Exercises.objects.filter(id__contained_by=(req.user.profile.exercitiiProvocari).order_by("?")
    print(randomQuestions)
    return render(req, "../templates/pagini/provocare.html")

Модель упражнений

from django.db import models
from django.contrib.postgres.fields import ArrayField
from lectii.models import Lectie

# Create your models here.
class Exercises(models.Model):
    idLectie = models.ForeignKey(Lectie, on_delete=models.DO_NOTHING, blank=True, null=True)
    intrebare = models.CharField(max_length = 300)
    variante = ArrayField(models.CharField(max_length=300), null=True)
    variantaCorecta = models.CharField(max_length = 1)
    def __str__(self):
        return self.intrebare

Итак, что я на самом деле делаю, так это пытаюсь отличить массив всех упражнений от одного с идентификаторамиуже выполненные упражнения и рандомизация результата.

Но когда я пытаюсь изменить ситуацию, я получаю эту ошибку.

1 Ответ

1 голос
/ 11 апреля 2019

Разве простого in поиска не будет достаточно для этого случая?

Если предположить, req.user.profile.exercitiiProvocari - это какой-то массив / список / контейнер, вы можете попробовать что-то вроде этого:

randomQuestions = Exercises.objects.filter(id__in=req.user.profile.exercitiiProvocari)\
    .order_by("?")

Чтобы исключить кажущиеся вопросы, вы можете попробовать использовать exclude().Это вернет все вопросы, которые НЕ находятся в req.user.profile.exercitiiProvocari, и они должны быть в случайном порядке:

randomQuestions = Exercises.objects.exclude(id__in=req.user.profile.exercitiiProvocari)\
    .order_by("?")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...