Я экспериментирую, чтобы получить лучшее представление о том, как работает Django. Возьмите тестовую функцию, описанную ниже, которая создает категорию, тег и элемент , представляющий MacBook Pro , затем добавляет 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 объектов в Category, Tag и Item .
Вот что у меня есть:
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()
Я сталкиваюсь с 2 проблемами:
- Класс «Элемент» не имеет члена «objects»
- ValueError: Невозможно назначить "]>": "OnHand.product" должен быть экземпляром "Item".
Как мне связать существующий экземпляр 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)
Что дает мне очевидное «Элемент» не имеет атрибута «product» , потому что, очевидно, его нет. Я попробовал это из-за того, как работает моя Tag
модель.