Wagh
Wagh

Reputation: 4316

want to save the data of each user django

I ahave userprofile model

class UserProfile(models.Model):
    user = models.ForeignKey(User) 
    score = models.IntegerField(max_length = 50, blank = True,null = True)


    def __str__(self):

        return "%s's profile" % self.user

my view is

@login_required()
def score(request):
    if request.is_ajax():
        print request.method
        if request.method == 'GET':
            try:
                user1 = UserProfile.objects.get(user=request.user)
                print user1
                user1.score = request.GET.get('bjpFan')
                user1.save()
                print user1.score
                print "rahul"
                return HttpResponse("%s" % user1.score )

            except UserProfile.DoesNotExist:
                print "Gaurav"
                user1 = create_user()
            return HttpResponse("%s" % user1.score )

So score is getting stored to database, but when new user use this application his object is not getting stored. Want create new object for the user if he uses this application first time. I created userprofile object also.

def create_user(username, email = None, password = None):   

    try:
        user = User.objects.get(username=username)
    except:       
        user = User(username=username,email=email)
        user1=UserProfile(user=user.request, score=user.score)

        user.save()
        user1.save()      
    return user

but when new user access this application his name and score is not getting stored. His all facebook data is getting stored in facebook model. please help me.

Upvotes: 2

Views: 602

Answers (1)

dani herrera
dani herrera

Reputation: 51745

Most robust way is using signals:

class UserProfile(models.Model):
    user = OneToOneField( User, editable = False )   #<----One to One! Not FK.
    score = models.IntegerField(max_length = 50, default = 0) 

#
# this few lines of code in your UserProfile models.py will 
# create the profile just after user is created.
#
from django.dispatch import receiver
from django.db.models.signals import post_save
@receiver(post_save, sender=User)
def createProfile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create( user = instance, )

Upvotes: 1

Related Questions