Аргумент _filter_or_exclude () после ** должен быть отображением, а не ReverseManyRelatedObjectsDescriptor - PullRequest
1 голос
/ 22 июля 2011

Почему я получаю эту ошибку?

Мои Models.py:

    # -*- coding: utf-8 -*-
from django.db import models
from sitem.ligler.models import *
from sitem.takimlar.models import *
from sitem.futbolcular.models import *
from sitem.stadyumlar.models import *
from sitem.ligmaclari.models import *

DAKIKA_SECIMLERI = [(str(dk), str(dk)) for dk in range(1, 121)]
KART_SECIMLER = (
    ('SK','Sari Kart'),
    ('SKK','Sarıdan Kırmızı Kart'),
    ('DKK','Direk Kırmızı Kart')
)
# Create your models here.
class EvSahibiKartlar(models.Model):
    mac = models.ForeignKey(Ligmaclari)
    ev_sahibi_oyuncu = models.ForeignKey(Futbolcular, limit_choices_to = Ligmaclari.ev_sahibi_takim_kadro, related_name='Ev Sahibi Oyuncu')
    kart_tipi = models.CharField(max_length=50, choices=KART_SECIMLER)
    dakika = models.PositiveSmallIntegerField(max_length=4, choices=DAKIKA_SECIMLERI)

    def __unicode__(self):
        return self.mac

class KonukKartlar(models.Model):
    mac = models.ForeignKey(Ligmaclari)
    konuk_takim_oyuncu = models.ForeignKey(Futbolcular, limit_choices_to = Ligmaclari.konuk_takim_kadro, related_name='Konuk Takım Oyuncu')
    kart_tipi = models.CharField(max_length=50, choices=KART_SECIMLER)
    dakika = models.PositiveSmallIntegerField(max_length=4, choices=DAKIKA_SECIMLERI)

    def __unicode__(self):
        return self.mac

Мой admin.py:

from sitem.kartlar.models import *
from django.contrib import admin
from django import forms
from django.forms import ModelForm

class EvSahibiKartlarAdmin(admin.ModelAdmin):
    ordering = ['mac']

class KonukKartlarAdmin(admin.ModelAdmin):
    ordering = ['mac']
admin.site.register(EvSahibiKartlar,EvSahibiKartlarAdmin)
admin.site.register(KonukKartlar,KonukKartlarAdmin)

На самом деле я хочу сделать фильтр ForeignKeys...

Ответы [ 2 ]

2 голосов
/ 08 марта 2017

Решение, вдохновленное https://stackoverflow.com/a/26203568/2144569

Вы (и я тоже) получили эту ошибку при передаче набора запросов к limit_choices_to, вместо этого непосредственно передайте pk (т.е.: {pk__in:pks}), и она будет работать:

Я получаю эту ошибку при попытке удалить дубликаты в limit_choices_to, как я делал

limit_choices_to = Q(attr1=True) | Q(attr2=True) | Q(attr3=True)

Я пытался сделать:

def my_func():
    return MyModel.objects.filter(Q(attr1=True) | Q(attr2=True) | Q(attr3=True)).distinct().all()

class HeadModel(models.Model):
    mtm = models.ManyToManyField(
        MyModel,
        limit_choices_to=my_func,
    )

но я получил ошибку выше, так как это набор запросов. Наконец я сделал

def my_func():
    return {'pk__in':MyModel.objects.filter(Q(attr1=True) | Q(attr2=True) | Q(attr3=True)).distinct().values_list('id', flat=True)}

class HeadModel(models.Model):
    mtm = models.ManyToManyField(
        MyModel,
        limit_choices_to=my_func,
    )

П.С .: Да, это очень старый пост, но необходимость была / была еще здесь

2 голосов
/ 22 июля 2011

limit_choices_to не передается действительное значение .

...