Django将新创建的ID从Models.Manager传递给视图

时间:2019-01-12 19:07:36

标签: django django-models django-views

我正在尝试将Models.Manager中新条目的新创建的id传递给视图,以便将其保存为变量。

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

我想做的是获取已保存条目的ID,并将其发送到视图。

我尝试在模型管理器上使用return savedreturn saved.idreturn save.id将其传递给视图。现在,我将其命名为True, saved,因为这是我阅读几篇文章后收集的正确方法。但是,当我进入视图时,我没有得到想要的ID。在视图中尝试print (saved.id)时,我得到:

  

NameError:未定义名称“保存”

我也在视图if save = [0]: print(saved.id)中尝试过,并且得到:

  

如果保存= [0]                ^   SyntaxError:语法无效

现在,我只是尝试打印,但是一旦我知道该值将它添加到视图中,就将id保存为变量。

我也尝试过if save = True

如何将新创建的id从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) 
    if save == True:
        print("hello")
    else:
        print ("bad luck!)
    return redirect ((reverse('project:index')))

它将条目保存在数据库中并返回“不幸”。因此,保存在某种程度上不是== True。

1 个答案:

答案 0 :(得分:0)

我需要更具体地说明我的变量。

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(...)从模型传递了ID。然后在视图中使用print(save)访问它,因为返回基于save=Items.objects.save...。它给了我新创建条目的ID。