Python 现有对象Django上的OneToMany

Python 现有对象Django上的OneToMany,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我正在做实验,以便更好地了解Django的工作原理。使用下面的测试功能,创建一个表示Macbook Pro的类别、标签和项目,然后向该类别、标签和项目(产品)添加一个Macbook Pro 相关模型:(注意,我处于故障排除过程中,模型可能不完全代表问题时的情况) 测试用例: def make_macbook(): """ Create a Manufacturer for Apple """ apple = Manufacturer(name='Apple', rep_name

我正在做实验,以便更好地了解Django的工作原理。使用下面的测试功能,创建一个表示Macbook Pro的类别、标签和项目,然后向该类别、标签和项目(产品)添加一个Macbook Pro

<强>相关模型:(注意,我处于故障排除过程中,模型可能不完全代表问题时的情况)

测试用例:

def make_macbook():
    """ Create a Manufacturer for Apple """
    apple = Manufacturer(name='Apple', rep_name='Jason Wilburn', support_number='1-800-Apple')
    apple.save()
    print('Manufacturer name: {}'.format(apple))

    """ Create a Category for Laptops """
    laptop = Category(name='Laptops')
    laptop.save()
    print('Category name: {}'.format(laptop))

    """ Create a Tag for Mac """
    mac = Tag(title='mac')
    mac.save()
    print('Tag name: {}'.format(mac))

    """ Create a MacBook Item """
    macbook = Item(name='Macbook Pro', description='15.5" Macbook Pro, 2018 Model', manufacturer=apple)
    macbook.save()
    print('Item name: {}'.format(macbook))

    """ Create a MacBook OnHand item """
    newMac = OnHand(name='MacBook Pro 15.5"', serial='SC02XP0NRJGH5', asset='DEPSC02XP0NRJGH5', product=macbook)
    newMac.save()


    return newMac.product
我现在测试的是向类别、标记和项目添加新的现有对象

以下是我所拥有的:

def add_macbook():
    """ Find MacBook Item """
    macbook = Item.objects.filter(name='Macbook Pro')

    """ Create a MacBook OnHand item """
    newMac = OnHand(name='MacBook Pro 15.5"', serial='000000000000000', asset='DEP0000000000000', product=macbook)
    newMac.save()
我面临两个问题:

  • 类“项”没有“对象”成员
  • ValueError:无法分配“]>”:“OnHand.product”必须是“Item”实例
  • 如何获取要关联的现有实例

    我也尝试过:

    def add_macbook():
        """ Find MacBook Item """
        macbook = Item.objects.get(name='Macbook Pro')
    
        """ Create a MacBook OnHand item """
        newMac = OnHand(name='MacBook Pro 15.5"', serial='000000000000000', asset='DEP0000000000000')
        newMac.save()
        macbook.product.add(newMac)
    
    这给了我一个明显的‘Item’没有‘product’属性,因为它显然没有。我之所以尝试这样做,是因为我的
    标记
    模型是如何工作的。

    函数
    .filter()
    返回一个查询集,而不是单个模型实例,并且不能将整个查询集指定为外键。另一方面,
    .get()
    将返回单个模型实例。你几乎找到了正确的组合。试试这个:

    def add_macbook():
        """ Find MacBook Item """
        macbook = Item.objects.get(name='Macbook Pro')
    
    
        """ Create a MacBook OnHand item """
        newMac = OnHand(
            name='MacBook Pro 15.5"',
            serial='000000000000000',
            asset='DEP0000000000000',
            product=macbook
        )
        newMac.save()
    
    类“Item”没有“objects”成员
    错误对我来说没有意义。这可能只是一个IDE警告吗

    下面是filter函数的示例。

    函数
    .filter()
    返回一个查询集而不是单个模型实例,并且不能将整个查询集指定为外键。另一方面,
    .get()
    将返回单个模型实例。你几乎找到了正确的组合。试试这个:

    def add_macbook():
        """ Find MacBook Item """
        macbook = Item.objects.get(name='Macbook Pro')
    
    
        """ Create a MacBook OnHand item """
        newMac = OnHand(
            name='MacBook Pro 15.5"',
            serial='000000000000000',
            asset='DEP0000000000000',
            product=macbook
        )
        newMac.save()
    
    类“Item”没有“objects”成员
    错误对我来说没有意义。这可能只是一个IDE警告吗


    以下是筛选功能的详细信息。

    如果您要否决投票,请告诉我您否决投票的原因,以便解决此问题。:)您能否共享您的
    models.py
    文件?已添加到编辑中。如果你需要见其他人,请告诉我。我只是加入了最相关的。我是否应该在
    add_macbook()
    下获取
    macbook
    的ID,然后将其“插入”到
    newMac
    OnHand()
    实例上的
    产品
    属性中?如果你要投票失败,请告诉我你为什么投票失败,以便解决问题。:)您能否共享您的
    models.py
    文件?已添加到编辑中。如果你需要见其他人,请告诉我。我只是包含了最相关的。我应该在
    add_macbook()
    下获取
    macbook
    的ID,然后将其“插入”到
    newMac
    OnHand()
    实例的
    产品属性中吗?是的,错误似乎只是IDE,因为没有设置环境变量,所以它是正确的,在打开django shell之前,没有对象成员。这确实有效!所以我自己在这里的故障排除并不遥远,但我认为自己又进入了一个逻辑循环哈哈。谢谢你的帮助。:)当然,很高兴它有帮助。是的,错误似乎只是IDE,因为没有设置环境变量,所以它是正确的,直到打开django外壳,没有对象成员。这确实有效!所以我自己在这里的故障排除并不遥远,但我认为自己又进入了一个逻辑循环哈哈。谢谢你的帮助。:)当然,很高兴这有帮助。