Prachi Sharma
Prachi Sharma

Reputation: 341

Move record from first Django model to second and then delete it from first

I want to move a record from NewUsers model to PendingUsers model on the button click. After moving, the record should be removed(deleted) from NewUsers model.

Here's the models:

class NewUser(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, default=1)
    newuser_name = models.CharField(max_length=50)
    newuser_company = models.CharField(max_length=100)
    newuser_mobile = models.CharField(max_length=10)
    newuser_designation = models.CharField(max_length=50) 
    newuser_image = models.ImageField(upload_to='userprofile_pics/users/', blank=True)

    def __str__(self):
        return self.user.email

class PendingUsers(models.Model):
    pendinguser = models.OneToOneField(NewUser, on_delete = models.CASCADE, default=1)

    def __str__(self):
        return self.pendinguser.newuser_name

On Button click, the code to move the record is:

query_user = get_object_or_404(NewUser, id=id)
pendingUser = PendingUsers()
pendingUser.pendinguser = query_user
pendingUser.save()

And to delete it from NewUsers:

NewUser.objects.filter(id=id).delete()

It is successfully moving the record to PendingUsers. But as soon as I'm deleting it from NewUser, it is automatically deleted from PendingUser as well.

Can anybody help me out with this about how to achieve this successfully? Do I need to change my PendingUsers model?

Thanks in advance!

Upvotes: 2

Views: 283

Answers (2)

Naveen Jain
Naveen Jain

Reputation: 1072

I would suggest modify your NewUser model and add new Boolean field is_pending.

class NewUser(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, default=1)
    newuser_name = models.CharField(max_length=50)
    newuser_company = models.CharField(max_length=100)
    newuser_mobile = models.CharField(max_length=10)
    newuser_designation = models.CharField(max_length=50) 
    newuser_image = models.ImageField(upload_to='userprofile_pics/users/', blank=True)
    is_pending= models.BooleanField(max_length=10, default=True)

query_user = get_object_or_404(NewUser, id=id)
query_user.user_status = False
query_user.save()  

NOTE :: -

you can change the default values and logic according to your requirement for is_pending field.


Upvotes: 1

Lord Elrond
Lord Elrond

Reputation: 16032

Instead of taking that approach, you can add a user_status field to your NewUser column, like this:

class NewUser(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, default=1)
    newuser_name = models.CharField(max_length=50)
    newuser_company = models.CharField(max_length=100)
    newuser_mobile = models.CharField(max_length=10)
    newuser_designation = models.CharField(max_length=50) 
    newuser_image = models.ImageField(upload_to='userprofile_pics/users/', blank=True)
    user_status = models.CharField(max_length=10, default='new')

Now when the button is clicked, you simply change the value of user_status:

query_user = get_object_or_404(NewUser, id=id)
query_user.user_status = 'pending'
query_user.save()

Upvotes: 1

Related Questions