Получить уникальные записи из queryset
Есть модель.
class Document(models.Model):
number = models.PositiveIntegerField()
product = models.ForeignKey(Product, on_delete=models.CASCADE)
В одной накладной может быть несколько наименований товаров. При Document.objects.all() получаются все записи. Как можно получить queryset только с уникальными номерами накладных? Например, было:
№1 кружка
№1 вилка
№2 табурет
№2 стол
№3 мяч
Нужно, чтобы получалось:
№1
№2
№3
Нужно использовать distinct()
Document.objects.order_by('number').distinct()
Корень проблемы в том, что у вас неправильно смоделирована предметная область. Вам нужна схема типа такой:
class Document(models.Model):
number = models.PositiveIntegerField()
class DocumentItem(models.Model):
document = models.ForeignKey(Document, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
Для накладной у вас одна запись в таблице документов, и несколько записей в таблице позиций DocumentItem, которая связывает накладную и товар. В этом случае Document.objects.all() вернет накладные без повторений.