我正在进行实验,以便更好地了解Django是如何工作的。下面的测试函数创建一个类别、标记和表示Macbook Pros的Item,然后将Macbook Pro添加到该类别、标记和项目(产品)中。
相关模型:(注意:我正在进行故障排除,模型可能不完全代表问题发生时的情况)
class Tag(models.Model):
title = models.CharField(max_length=20)
def __str__(self):
return self.title
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=100)
manufacturer = models.ForeignKey('Manufacturer', blank=True, null=True, on_delete=models.SET_NULL)
introduction = models.DateField(auto_now=True)
quanity = models.IntegerField(default=0)
is_retired = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.name
def add(self):
pass
def remove(self):
pass
def retire(self): # Rex came up with this, roll credits.
pass
def count(self):
pass
class OnHand(models.Model):
name = models.CharField(max_length=100)
serial = models.CharField(max_length=80)
asset = models.CharField(max_length=20)
product = models.ForeignKey(Item, blank=True, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.serial测试用例:
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我现在测试的是将新的OnHand对象添加到类别、标记和项中。
以下是我所拥有的:
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’,因为它显然没有。我尝试这是因为我的Tag模型是如何工作的。
发布于 2019-01-12 03:30:33
.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()Class 'Item' has no 'objects' member错误对我来说毫无意义。这可能只是IDE警告吗?
下面是过滤器函数的链接。
https://stackoverflow.com/questions/54155789
复制相似问题