как я могу получить в моем шаблоне набор запросов, который показывает мне связанный объект из базы данных - PullRequest
0 голосов
/ 28 мая 2018

Ну, это мои views.py

def movieO(request, id):
    moviee = Movies.objects.get(id=id)


    moviee = {
    'moviee':moviee,


    }
    return render(request, 'moviesingle.html', contexto)

и мои URL:

re_path(r'^movies/(?P<id>\d+)/$', movieO, name='moviesweb')

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

это мои models.py

class Movies(models.Model):
    titulo = models.CharField(max_length=50)
    Cover = models.ImageField(upload_to='static', height_field=None, 
    width_field=None, max_length=100)
    fecha_de_lanzamiento = models.DateField()
    director = models.CharField(max_length=30)
    reparto = models.CharField(max_length=200)
    genero = models.CharField(max_length=20)
    pais = models.CharField(max_length=20)
    sinopsis = models.CharField(max_length=400)
    puntuacion = models.DecimalField(max_digits=5, decimal_places=1, 
     blank=True, null=True)
    links = models.TextField(blank=True, null=True)
      ACCION = 'ACC'
      DRAMA = 'DRA'
      CIENCIA_FICCION = 'SC'
      SUSPENSO = 'SUS'
      TERROR = 'TER'
      CRIMEN = 'CRI'
    TAGS_CHOICES = (
    (ACCION, 'Acción'),
    (DRAMA, 'Drama'),
    (CIENCIA_FICCION, 'Ciencia Ficción'),
    (TERROR, 'Terror'),
    (SUSPENSO, 'Suspenso'),
    (CRIMEN, 'Crimen'),
)
    tags = MultiSelectField(choices=TAGS_CHOICES, blank=True)
    class Meta:
       verbose_name_plural = "Películas"

    def __str__(self):
        return self.titulo

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

Что я пробовал:

def peliculasO(request, id, *args, **kwargs):
    peliculaa = Peliculas.objects.get(id=id)
    relacionarr = Peliculas.objects.filter(Q(tags__icontains=peliculaa.tags))
    contexto = {
        'peliculaa':peliculaa,
        'relacionarr':relacionarr
        }

    return render(request, 'moviesingle.html', contexto)

но когда я вызываю его через мой шаблон: {{relacionarr}}, я просто получаю пустой запрос, и в моей базе данных есть объекты с такой же информацией.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы используете нестандартное поле (MultiSelectField), которое хранит значения в денормализованном виде.Это, безусловно, делает запрос сложнее, чем правильный дизайн, который использовал бы модель Tag и поле m2m для этой Tag модели в Peliculas.

Вы даже не опубликовали, из какого пакета вы получили этот MultiSelectField, но если это тот https://github.com/goinnn/django-multiselectfield, то то, что вы хотите, должно быть примерно таким (непроверенным, конечно):

import operator

def peliculasO(request, id, *args, **kwargs):
    peliculaa = Peliculas.objects.get(id=id)
    tags = peliculaa.get_tags_list() 
    q = reduce(operator.or_, [Q(tags__icontains=tag.lower()) for tag in tags])
    relacionarr = Peliculas.objects.filter(q)

    # etc

Обратите внимание, что это может привести к ложному срабатыванию, если у вас есть, например, «foo» и «foobar» в ваших тегах, поскольку «foobar» содержит «« foo ».

При правильном дизайне:

class Tag(models.Model):
    label = models.CharField(unique=True, ...)
    # ...

class Peliculas(models.Model):
    tags = models.ManyToMany(Tag, related_name='peliculas')
    # ...

Вы могли бы просто использовать:

    relacionarr = Peliculas.objects.filter(tags__in=peliculaa.tags.all())
0 голосов
/ 29 мая 2018
def peliculasO(request, id, *args, **kwargs):
    peliculaa = Peliculas.objects.get(id=id)
    relacionar = Peliculas.objects.all()
   relacionarr = Peliculas.objects.filter(Q(tags__icontains=peliculaa.tags))
    contexto = {
        'peliculaa':peliculaa,
        'relacionarr':relacionarr


        }

    return render(request, 'moviesingle.html', contexto)

хорошо с этой точки зрения, я пытаюсь отправить, как будто это был поиск, но уже определил информацию, которую я хочу найти, я имею в виду, что нет формы, которая отправляет значение, но через просмотр значение ужезаданный, поэтому я могу получить для этого способа набор запросов, который я хочу ... но когда я вызываю его через мой шаблон: {{relacionarr}}, я просто получаю пустой запрос, и в моей базе данных есть объекты с той же информацией

...