代码之家  ›  专栏  ›  技术社区  ›  user3541631

通过使用FK覆盖另一个模型的save方法来更新对象/实例

  •  0
  • user3541631  · 技术社区  · 6 年前

     class Acc(models.Model):
            name = models.CharField( max_length=35)
    
    class User(AbstractBaseUser, PermissionsMixin):
    
        acc = models.ForeignKey(Acc, blank=True, null=True, related_name='owner', on_delete=models.CASCADE)
    
    
    class Note(models.Model):
        name = models.CharField( max_length=35
        receiver = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, on_delete=models.CASCADE)
    
    class Item(models.Model):
        note = models.ForeignKey(Notification, on_delete=models.CASCADE,)
        acc = models.ForeignKey(Acc, on_delete=models.CASCADE)
    
        def save(self, *args, **kwargs):
    
            .....
            # update note
            Note.objects.filter(id=self.note_id).update(receiver=self.account.owner)
    

    我覆盖了 save 上的方法 Item 对象/模型,以更新 Note receiver 使用外键。

    我得到以下错误:

    int() argument must be a string, a bytes-like object or a number, not 'RelatedManager'
    

    Note.objects.filter(id=self.note_id).update(receiver=self.acc.owner)
    

    这个 owner Acc 模型,是一个 User 模特,我想买一个

    1 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Roseman    6 年前

    你的模型好像错了。用户有Acc的ForeignKey,这意味着 acc.owner 是一个经理,它允许您访问所有这些,例如通过 acc.owner.all()

    要么你想让FK从一个Acc转到另一个用户-这意味着每个用户可以有多个Acc-要么你应该使用一个OneToOneField,这样就有一个Acc和一个用户。