【问题标题】:Move record from first Django model to second and then delete it from first将记录从第一个 Django 模型移动到第二个,然后从第一个删除它
【发布时间】:2019-10-04 17:29:33
【问题描述】:

我想通过单击按钮将记录从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 模型吗?

提前致谢!

【问题讨论】:

  • "on_delete = models.CASCADE" 删除链接模型,所以是的,您需要更改模型。
  • 通常您可以更改用户状态(不删除),或者您需要将所有字段从新用户复制到待处理用户以避免丢失数据。
  • @VelikiiNehochuha 那么我应该如何设计模型?
  • @VelikiiNehochuha 我认为改变状态会奏效。谢谢!

标签: python django django-models django-views


【解决方案1】:

您可以将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()

【讨论】:

  • 感谢您的回答。我做了与 @VelikiiNehochuha 之前在 cmets 中提到的相同。它现在可以按我的意愿工作了。
【解决方案2】:

我建议修改您的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()  

注意 :: -

您可以根据您对is_pending字段的要求更改default values and logic


【讨论】:

  • 感谢您的回答。如前所述,它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多