Django模型重复创建?

0 投票
1 回答
613 浏览
提问于 2025-04-18 06:23

为什么我的属性模型在数据库里被保存了两次?真奇怪……

这是我的视图代码:

@login_required(login_url='/login/')
@transaction.atomic()
@reversion.create_revision()
def add_item_type(request, id_item, id_item_type):
    item = Item.objects.get(id=id_item)
    item_type = ItemType.objects.get(id=id_item_type)

    item.status = Item.DEPLOYED # Set to phase deployment
    item.save()
    for a in item_type.attribute_types.all(): # Create all attribute skeletons to item
        Attribute.objects.create(name=a.name, description=a.description, type=a.attr_type, item=item)
    ctx = {'item':item, 'item_type':item_type}
    return render_to_response('des/item/add_item_type.html', ctx, context_instance=RequestContext(request))

编辑:

当我查看我的数据库(postgres)时,我发现我的视图循环被调用了两次(并不是在同一个循环里保存两次),或者说我的视图被调用了两次。我不知道为什么。我很确定这不是循环的问题,因为在我的数据库里,属性类是这样保存的。

id - name 
1 - fly 
2 - sit 
3 - run 
4 - fly 
5 - sit 
6 - run

有没有人知道为什么会这样? 要理解我的代码,可以把ItemType看作一个类,把AttributeType看作ItemType类的属性,而Item是ItemType的一个实例,Attribute是AttributeType的一个实例。

1 个回答

1

好的,我通过在属性模型(Attribute.name)中设置一个唯一的值(unique=True)来解决了我的问题,这样在同一个物品类(Item class)中就不会有重复的属性了。我所做的其实是一个“临时修补”,但并没有解决真正的问题,就是视图被调用了两次。

撰写回答