Python 现有对象Django上的OneToMany
我正在做实验,以便更好地了解Django的工作原理。使用下面的测试功能,创建一个表示Macbook Pro的类别、标签和项目,然后向该类别、标签和项目(产品)添加一个Macbook ProPython 现有对象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
<强>相关模型:(注意,我处于故障排除过程中,模型可能不完全代表问题时的情况)
测试用例: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()
我面临两个问题:
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外壳,没有对象成员。这确实有效!所以我自己在这里的故障排除并不遥远,但我认为自己又进入了一个逻辑循环哈哈。谢谢你的帮助。:)当然,很高兴这有帮助。