pythondjangopython-3.xdjango-querysetsearchqueryset

Add additional fields after phone number lookup in the database in Django


I am building an app that look for each phone number in the database. If there is any duplicate, I want to grab the first phone number found as the main record for that phone number, then for the duplicate information(name, location), get each one of those fields, and add it to the main record phone number fields (name, location), separated by a semi colon.

The outcome would look like this after checking the duplicate information of the main phone number record found:

Name                      Location               Phone number
Helene,Sandra             New Yok, Boston        000-000

Please find my model below:

class Document(models.Model):
    name = models.CharField(null=True, max_length=254, blank=True)
    location = models.CharField(null=True, max_length=254, blank=True)
    phone_number = models.CharField(null=True, max_length=254, blank=True)

I am a bit lost on to achieve the above. Any help would be much appreciated.

Below is what I have tried so far:(not working)

 from django.shortcuts import render
    from .models import Document

    def index(request):
        search_number = list(Document.objects.order_by('-created').values("phone_number").distinct().order_by()) # Dictionary list of all numbers sorted by creation data without duplicate

        for x in search_number:
            try:
                look_up = Document.objects.values("phone_number")
                list_in_dba = look_up.phone_number
                x in list_in_dba['phone_number']
                print("Yes")
            except:
                print("No")

        return render(request, 'snippets/index.html')   

Solution

  • I would start with something like this.

    ## this will get you all document records that have a duplicate phone-number 
    ## and also group them by phone-number.
    duplicate_phone_numbers = Document.objects.values('phone_number').\
        annotate(total_items=Count('phone_number')).order_by('-total_items').filter(total_items__gt=1)
    
    for entry in duplicate_phone_numbers:
        records = Document.objects.filter(phone_number=entry.get('phone_number')
        ## unsure whether you want to just output the info here or 
        ## update the actual record
        all_names = ''
        all_locations = ''
        for x in records:
            all_names += x.name + ";"
            all_locations += x.location + ";"
        print all_names, all_locations, entry.get('phone_number')
        # to update the actual record
        record = records[0]
        record.name = all_names
        record.location = all_locations
        record.save()