Переместить запись из первой модели Django во вторую, а затем удалить ее из первой - PullRequest
2 голосов
/ 04 октября 2019

Я хочу переместить запись из модели NewUsers в модель PendingUsers нажатием кнопки. После перемещения запись должна быть удалена (удалена) из NewUsers модели.

Вот модели:

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

При нажатии кнопки код для перемещения записи:

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

И чтобы удалить его из NewUsers:

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

Он успешно перемещает запись в PendingUsers. Но как только я удаляю его из NewUser, он автоматически удаляется и из PendingUser.

Может кто-нибудь помочь мне с этим, как добиться этого успешно? Нужно ли менять модель PendingUsers?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Я бы предложил изменить ваше NewUser model и добавить новое Boolean поле 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()  

ПРИМЕЧАНИЕ :: -

Вы можете изменить default values and logic согласно вашему требованию для is_pending поле.


1 голос
/ 04 октября 2019

Вместо этого подхода вы можете добавить поле user_status в свой столбец NewUser, например:

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')

Теперь, когда кнопка нажата, вы просто меняете значение user_status:

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