Search code examples
djangodjango-modelsdjango-databasedjango-datatable

Django: Get model field data from a model field data


I have something like this in views.py.

    if form.is_valid():

        ref_user = User.objects.get(
        username=form.cleaned_data['referrer'])

        if User.objects.filter(username=ref_user).exists():

            user = User.objects.create_user(
            username=form.cleaned_data['username']
            )   

            direct = DirectReferral.objects.create(
                name = user,
                referrer = ref_user # New created referrer
            )

            if DirectReferral.objects.filter(referrer=ref_user).exists():

                # Get the referrer of the newly created referrer in DirectReferral database

                indirect = IndirectReferral.objects.create(
                    name = user,
                    referrer = # This should be the referrer of the newly created referrer
                )

How do I make a query or get the referrer of the newly created referrer?

To further understand what I mean please check image below.
enter image description here

I hope you understand my question.


Solution

  • I guess there is some mistake in the code.

    if form.is_valid():

        ref_user = User.objects.get(
        username=form.cleaned_data['referrer'])
    
        if User.objects.filter(username=ref_user).exists():
    
            user = User.objects.create_user(
            username=form.cleaned_data['username']
            )   
    
            direct = DirectReferral.objects.create(
                name = user,
                referrer = ref_user # New created referrer
            )
    
            if DirectReferral.objects.filter(referrer=ref_user).exists():
    
                # Here you are checking for something you just created. 
                # I guess this should be 
                # DirectReferral.objects.filter(name=ref_user).exists()
    
                # Get the referrer of the newly created referrer in DirectReferral database
    
                indirect = IndirectReferral.objects.create(
                    name = user,
                    referrer = # This should be the referrer of the newly created referrer
                )
    

    If you intend to find the referrer of the referral user of the currently created user, you could do something like this.

    if form.is_valid():

        ref_user = User.objects.get(
        username=form.cleaned_data['referrer'])
    
        if User.objects.filter(username=ref_user).exists():
    
            user = User.objects.create_user(
            username=form.cleaned_data['username']
            )   
    
            direct = DirectReferral.objects.create(
                name = user,
                referrer = ref_user # New created referrer
            )
    
            try:
                referral_of_ref_user = DirectReferral.objects.get(name=ref_user).referrer
            except DirectReferral.DoesNotExist:
                # Do what needs to be done if direct referral not exist.
                print "No referrer"
                # Get the referrer of the newly created referrer in DirectReferral database
            else:
                indirect = IndirectReferral.objects.create(
                    name = user,
                    referrer = referral_of_ref_user
                )
    

    EDIT:

    By minimal edits to your code:

    if form.is_valid():

        ref_user = User.objects.get(
        username=form.cleaned_data['referrer'])
    
        if User.objects.filter(username=ref_user).exists():
    
            user = User.objects.create_user(
            username=form.cleaned_data['username']
            )   
    
            direct = DirectReferral.objects.create(
                name = user,
                referrer = ref_user # New created referrer
            )
    
            if DirectReferral.objects.filter(name=ref_user).exists():
    
                # Get the referrer of the newly created referrer in DirectReferral database
    
                indirect = IndirectReferral.objects.create(
                    name = user,
                    referrer = DirectReferral.objects.filter(name=ref_user)[0].referrer
                )