Как проверить, есть ли у Django Queryset соответствующее многолетние + иностранные клавиши?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как проверить, есть ли у Django Queryset соответствующее многолетние + иностранные клавиши?

Сообщение Anonymous »

Я пытаюсь проверить - в Django - если пользовательский запрос имеет два поля, которые соответствуют 100%. < /p>

Код: Выделить всё

class Foo(models.Model):
# ...
free_field = models.ForeignKey(FreeModel, ...)
must_match_m2m_field = models.ManyToManyField(ManyModel, ...)
must_match_fk_field = models.ForeignKey(BarModel, ...)
# ...

# user generates a queryset of Foo in a view:
get_foo_ids = request.GET.get('foo_IDs')
qs_foo = Foo.objects.filter(id__in=get_foo_ids)

< /code>
Итак, пользователь генерирует запрос модели «foo» (с несколькими объектами в нем), которая может содержать много объектов с а) различными свободными, и b), точно соответствующими многомоделям и бармоделям.qs_foo = 
#where following must be True:
FooObject_1.must_match_m2m_field.all() == FooObject_2.must_match_m2m_field.all() == FooObject_3.must_match_m2m_field.all()
# and where following must be True also:
FooObject_1.must_match_fk_field == FooObject_2.must_match_fk_field == FooObject_3.must_match_fk_field

< /code>
для объектов Freedom Key, которые я сделал следующим образом (я думаю, что это достаточно справедливо): < /p>
def check_same_objects(object_list):
return len(set(object_list)) == 1

check_bars = check_same_objects(qs_foo.values_list('must_match_fk_field', flat=True))
< /code>
Я сделал это для сравнения списков объектов в областях многомоменов каждого объекта: < /p>
def check_same_lists(object_lists):
for lst in object_lists:
if set(lst) != set(object_lists[0]):
return False
return True

should_match_foos = []
for e in qs_foo:
should_match_foos.append(e.must_match_m2m_field.all().values_list('id', flat=True))
check_manies = check_same_lists(should_match_foos)

# finally checking both 'must-match-fields':
check_both = all([check_bars, check_manies])

< /code>
Какова цель:
Существует другая модель, основанная на модели Foo: < /p>
class Fizz(models.Model):
# model linked to Foo Model, but must persist in DB even if Foo eventually modified or deleted.
# a pack of Fizz derives from a few 'Foo's...
foo_relation = models.ManyToMany(Foo, ...)
# ...
free_field_ = models.ManyToMany(FreeModel, ...)
must_match_with_FOO_m2m_field = models.ManyToManyField(ManyModel, ...)
must_match_with_FOO_fk_field = models.ForeignKey(BarModel, ...)
# additional DataFields which FOO must not have...

Каков более элегантный вариант Pythonic/django проверки, соответствуют ли эти два поля на 100% во всем QS?

Подробнее здесь: https://stackoverflow.com/questions/795 ... foreignkey
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»