Django Сравнить поля ManyToMany - PullRequest
0 голосов
/ 07 апреля 2020

Допустим, у меня есть модель:

class Group(models.Model):
    patients = models.ManyToManyField(Patient)
    patients_tracker = models.ManyToManyField(Patient, blank=True, editable=False, related_name="patient_tracker")
    ...

Теперь, в моей переопределенной функции save, я устанавливаю их обоих равными друг другу. Делая:

self.patients_tracker.set(self.patients.all()) #----Statement a

, но в моей функции post_save этот оператор

if instance.patients_tracker.all() != instance.patients.all(): #----Statement b

по какой-то причине возвращает False, хотя я проверил вручную и print(instance.patients_tracker.all()) & print("Here's the patients: ", instance.patients.all()) вернул то же самое Пациенты в них, которые только говорят мне, что «Заявление а» работает отлично.

Но почему «Заявление б» не работает и не возвращает истину? Что я делаю не так?

РЕДАКТИРОВАТЬ: Позвольте мне на самом деле быть более ясным о моих намерениях здесь: я интенсивно ищу везде и нет полевых трекеров или трекеров истории для ManyToManyFields. Я хочу знать, когда пациент или какой пациент добавлен или удален в поле Group.patients. Я подумал, что попробую сделать это вручную, но это не так хорошо, как вы можете видеть, go.

Спасибо, что прочитали это.

1 Ответ

0 голосов
/ 07 апреля 2020

Хорошо, я понял это после небольшого перерыва.

Ниже мы сравниваем наборы запросов, которые по какой-то причине не работают.

if instance.patients_tracker.all() != instance.patients.all(): #----Statement b

Но если мы просто включим queryset в список, добавив встроенную функцию python list (), например,

if list(instance.patients_tracker.all()) != list(instance.patients.all()): 

И это прекрасно работает. Я собирался убрать этот вопрос, поскольку это была моя глупая ошибка, но я решил добавить ответ на тот случай, если кто-то ищет те же ключевые слова, что и я, когда Гуглил ищет ответ на эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...