Django: найти «разницу» между двумя моделями - PullRequest
0 голосов
/ 24 апреля 2020

Скажем, у меня есть две модели следующим образом -

class DID_Definition_Model(models.Model):   # DID to Region-Carrier Mapping
    did_number= models.CharField(max_length=32, validators=[alphanumeric], primary_key=True)




class DID_Number_Assignment_Model(models.Model):       #DID Number Assignment
    did_selector = models.ForeignKey(DID_Definition_Model, on_delete=models.CASCADE, primary_key=True, unique=True)

Я хочу сообщить о «разнице» в записях (возможно, с помощью метода различий), которая может быть доступна в поле did_number DID_Definition_Model, но не в DID_Number_Assignment_Model Поле did_selector.

В моей неудачной попытке мой мыслительный процесс заключался в создании запроса, который будет содержать все записи did_number. Затем повторите ту же процедуру, чтобы получить все записи did_selector. Наконец, сравните два запроса, используя разностный метод. Но я как бы застрял на первом этапе -

  • getattr (DID_Definition_Model, did_number) Traceback (последний последний вызов): File "", строка 1, в NameError: имя 'did_number' не определено * Но приведенное выше просто невозможно, поскольку did_number является допустимым полем DID_Definition_Model

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

1 Ответ

1 голос
/ 24 апреля 2020

Чтобы найти все объекты, где нет связанных объектов, вы можете использовать relationship__isnull=True.

defs_with_no_assignments = DID_Definition_Model.objects.filter(
    did_number_assignment_model__isnull=True
)

Чтобы получить только значения, вы можете использовать values_list

did_numbers_with_no_assignments.values_list('did_number', flat=True)
...