Django ManyToOne? - PullRequest
       10

Django ManyToOne?

0 голосов
/ 12 января 2019

У меня есть приложение для управления запасами, а внутри находится класс Item(), представляющий продукт. Все устройства будут сериализованы, поэтому позже будет класс, представляющий каждое устройство с именем OnHand().

Модель изделия

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

Мне нужен атрибут для on_hand , который имеет отношение типа ManyToOne .

Концепция модели OnHand

class OnHand(models.Model):
    name = models.CharFiled(max_length=100)
    serial = models.CharField(max_length=80)
    asset = models.CharField(max_length=20)

    def __str__(self):
        return self.serial

При создании нового объекта OnHand я бы хотел связать его с Item . Как бы я поступил так?

Пример конструкции

  • Пункт
    • Имя = MacBook Pro
    • Описание = 15,5 "MacBook Pro
    • OnHand
      • серийный номер, бирка актива
      • серийный номер, бирка актива
      • серийный номер, бирка актива

Текущий тестовый код

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()

    """ Add to Item's OnHand """

Теперь я в основном застрял при добавлении к Item () OnHand для создания отношений.

1 Ответ

0 голосов
/ 12 января 2019

Вы можете добавить внешний ключ из вашей модели OnHand в модель Item для достижения этой цели. Когда вы создаете объект OnHand, вы просто привязываете его к необходимому объекту Item.

class OnHand(models.Model):
   name = models.CharFiled(max_length=100)
   serial = models.CharField(max_length=80)
   asset = models.CharField(max_length=20)
   item = models.ForeignKey(Item)

   def __str__(self):
       return self.serial

Тогда, по вашему мнению, при создании объекта OnHand,

...
""" 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, item=macbook)
newMac.save()
...

Надеюсь, это поможет!

...