Django ModelForm с ForeignKey - PullRequest
       10

Django ModelForm с ForeignKey

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

У меня есть 2 модели, Item и OnHand . Элемент представляет продукт, как клавиатура USB, в то время как OnHand представляет фактическую клавиатуру USB.

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)
    category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)
    vendor = models.ForeignKey(Vendor, blank=True, null=True, on_delete=models.SET_NULL)
    vendor_sku = models.CharField(max_length=80, default='000000000')
    replenish_threshold = models.IntegerField(max_length=1000, default=10)
    max_onhand = models.IntegerField(max_length=10000, default=30)
    introduction = models.DateField(auto_now=True)
    tags = models.ManyToManyField(Tag)
    slug = models.SlugField(max_length=100, default=slugify(name))

    class Meta:
        verbose_name_plural = 'items'

    def __str__(self):
        return self.name

class OnHand(models.Model):
    name = models.CharField(max_length=100)
    serial = models.CharField(max_length=80, default='Consumable')
    asset = models.CharField(max_length=20, null=True, blank=True)
    product = models.ForeignKey(Item, blank=True, null=True, on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag)


    class Meta:
        verbose_name_plural = 'items on hand'

    def __str__(self):
        if not self.serial:
            return self.name
        return self.serial

У меня есть ModelForm , который я использую для добавления новых Предметов и OnHand , форма, с которой я работаю, находится в / inventory / add_onhand // , поэтому /inventory/add_onhand/1/ будет формой для добавления клавиатуры в инвентарь для Item с первичным ключом 1.

class OnHandForm(forms.ModelForm):
    class Meta:
        model = OnHand
        fields = {'name', 'asset', 'serial',}

def add_onhand(request, query):
    if request.method == "POST":
            form = OnHandForm(request.POST)
            if form.is_valid():
                    form.save()
                    return redirect('view_item')
    else:
        print(query)
        form = OnHandForm()
        item = Item.objects.get(pk=query)
        return render(request, 'add_onhand.html', {'form':form, 'item':item})

При сохранении новой OnHand через эту форму, как бы я направил отношение к Item ?

1 Ответ

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

Я все еще надеюсь на лучшее решение, но в то же время то, что я сделал, было добавлено product к форме, но с помощью JQuery, чтобы скрыть элемент и автоматически выбрать его на основе первичного Item ключ.

Это глупо, но работает. Я надеюсь на более элегантное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...