Django передает недавно созданный ID из Models.Manager в Views - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь передать вновь созданный идентификатор для новой записи из Models.Manager в представления, чтобы я мог сохранить его как переменную.

views.py

def save_form(request):
    item_a = request.POST['item_a']
    item_b = request.POST['item_b']
    Items.objects.save(item_a, item_b) 
    print (saved.id)
    return redirect ((reverse('project:index')))

models.py

class ItemsManager(models.Manager):
    def save(self, item_a, item_b)
        item_a = item_a
        item_b = item_b
        saved= Items.objects.create(
        item_a = item_a,
        item_b = item_b)
        return (True, saved)

class Items(models.Model):
    item_a=models.CharField(max_length=255)
    item_b=models.CharField(max_length=255)
    objects = ItemsManager()

Я пытаюсь получить идентификатор сохраненной записи и отправить его в представления.

Я пытался использовать return saved, return saved.id и return save.id в Диспетчере моделей, чтобы передать его представлениям. Прямо сейчас у меня есть True, saved, потому что я понял, что это правильный путь после прочтения нескольких постов. Однако, когда я прихожу к просмотру, я не получаю идентификатор, который я хочу. Когда я пытаюсь print (saved.id) в представлениях, я получаю:

NameError: имя 'сохранено' не определено

Я тоже пробовал во взглядах if save = [0]: print(saved.id) и получаю:

если сохранено = [0] ^ Ошибка синтаксиса: неверный синтаксис

Прямо сейчас я просто пытаюсь напечатать, но как только я знаю, что значение попадает в представления, я сохраню идентификатор как переменную.

я тоже пробовал if save = True

Как я могу передать вновь созданный идентификатор из моделей. Менеджер в представлениях?

Любая помощь будет оценена.

Обновление

Теперь я изменил views.py на:

    def save_form(request):
    item_a = request.POST['item_a']
    item_b = request.POST['item_b']
    Items.objects.save(item_a, item_b) 
    if save == True:
        print("hello")
    else:
        print ("bad luck!)
    return redirect ((reverse('project:index')))

Сохраняет записи в базе данных и возвращает «невезение». Так что экономить как-то нет == Правда.

1 Ответ

0 голосов
/ 15 января 2019

Мне нужно было быть более конкретным с моими переменными.

models.py

class ItemsManager(models.Manager):
def save(self, item_a, item_b)
    item_a = item_a
    item_b = item_b
    saved= Items.objects.create(
    item_a = item_a,
    item_b = item_b)
    return (saved.id)

class Items(models.Model):
    item_a=models.CharField(max_length=255)
    item_b=models.CharField(max_length=255)
    objects = ItemsManager()

views.py

def save_form(request):
item_a = request.POST['item_a']
item_b = request.POST['item_b']
save = Items.objects.save(item_a, item_b) 
print (save)
return redirect ((reverse('project:index')))

Я передал идентификатор модели с помощью return saved.id после создания объекта с saved=Items.objects.create(...). Затем в представлениях к нему обращались, используя print(save), поскольку возвращение было основано на save=Items.objects.save.... Это дало мне идентификатор из недавно созданной записи.

...