условия поиска activerecord - ищущий пустой указатель или ложь

Я просто столкнулся ForeignKey.limit_choices_to в документах Django. Не уверенный все же, как это работает, но это могла бы просто быть правильная вещь здесь.

Обновление: ForeignKey.limit_choices_to позволяет определять или константу, вызываемое или объект Q ограничить допустимый выбор для ключа. Константа, очевидно, бесполезна здесь, так как она ничего не знает о включенных объектах.

Используя вызываемое (функциональный или метод класса или любой вызываемый объект) кажется более многообещающим. Однако проблема того, как получить доступ к необходимой информации от объекта HttpRequest, остается. Используя локальная память потока может быть решением.

2. Обновление: Вот то, что работало на меня:

я создал промежуточное программное обеспечение, как описано в ссылке выше. Это извлекает один или несколько аргументов от запроса, ПОЛУЧАЮТ часть, такую как "product=1", и хранит эту информацию в местных жителях потока.

Следующий существует метод класса в модели, которая читает локальную переменную потока и возвращает список идентификаторов для ограничения выбора поля внешнего ключа.

@classmethod
def _product_list(cls):
    """
    return a list containing the one product_id contained in the request URL,
    or a query containing all valid product_ids if not id present in URL

    used to limit the choice of foreign key object to those related to the current product
    """
    id = threadlocals.get_current_product()
    if id is not None:
        return [id]
    else:
        return Product.objects.all().values('pk').query

важно возвратить запрос, содержащий все возможные идентификаторы, если ни один не был выбран так, чтобы нормальные администраторские страницы работали хорошо.

поле внешнего ключа тогда объявляется как:

product = models.ForeignKey(
    Product,
    limit_choices_to={
        id__in=BaseModel._product_list,
    },
)

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

26
задан Daniel 26 September 2009 в 15:36
поделиться

2 ответа

Попробуйте это (в Rails 2):

Project.all(:conditions => ['archived IS NULL OR archived = ?', false])

Это ограничение старых версий Rails, как описано здесь: https://rails.lighthouseapp.com/projects/ 8994 / Tickets / 1181-ar-find -roduction-null-when-it-should-be-is-null

17
ответ дан 28 November 2019 в 06:03
поделиться

@metasoarous

Попробуйте:

Project.all(:conditions => "archived IS NULL OR archived = 'F'")
0
ответ дан 28 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: