Обновите объект / экземпляр, переписав метод сохранения другой модели с помощью FK - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующие модели:

 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 с помощью ForeignKey.

Я получаю следующую ошибку:

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, которую я хочу получить за ключ receiver в примечании.

1 Ответ

0 голосов
/ 05 сентября 2018

Ваши модели кажутся неправильными. У пользователя есть ForeignKey to Acc, что означает, что потенциально существует много пользовательских объектов для каждого Acc. Так что acc.owner - это менеджер, который дает вам доступ ко всем этим, например, acc.owner.all().

Либо вы хотите, чтобы FK пошел в другом направлении, от Acc до User - что означало бы, что у каждого пользователя могло быть много Accs - или вы должны использовать OneToOneField, чтобы был один Acc и один пользователь.

...