Django All Columns Are Distinc
Учитывая, что у меня есть данные.
id, street, city
1, Main Street, Hull
2, Other Street, Hull
3, Bibble Way, Leicester
4, Bibble Way, Leicester
5, High Street, Londidium
6, High Street, Londidium
Я хочу отличить так, чтобы он удалял только Bibble Way, Leicester и High Street, Londidium, потому что это единственная запись, где все столбцы имеют дубликаты. Я уже пробовал .distinct('street','city'), но он удаляет, если либо улица, либо город имеют дубликат. Я хочу удалять только если все столбцы совпадают.
Какой правильный запрос для получения результата
id, street, city
1, Main Street, Hull
2, Other Street, Hull
3, Bibble Way, Leicester
5, High Street, Londidium
Я попробовал .values('steet','city').distinct(), и он удаляет записи Main Street, Hull и Other Street, Hull и оставляет одну из них. Возможно, из-за Hull
Что сработало:
Если бы это был фрейм данных, запрос, который работает для меня, был бы следующим: mymodeldf.drop_duplicates(subset=['city','street'], keep='last')
Но я хочу сделать это в distinct, так что мне не нужно делать его dataframe
Обязательно ли делать это в БД? (Потому что слишком много объектов для загрузки?)
Иначе у меня был бы соблазн сделать это на Python
last_address = '&&&&&&#£$%' # something impossible
for obj in Whatever.objects.all().order_by( 'city', 'street'):
address = obj.city + obj.street
if last_address == address : # a duplicate
obj.delete()
last_address = adddress
Если вы хотите сделать это в БД, вы можете аннотировать с помощью Concat улицы и города, а затем применить order_by и unique к этой аннотации.