Набор форм внутри ModelForm - PullRequest
0 голосов
/ 06 августа 2020

Итак, давайте попробуем объяснить:

У меня есть модель под названием инвентарь, которая служит для обработки моих продуктов и их количества. И у меня есть еще одна модель, которую я бы попросил предоставить определенную услугу, и мне нужно было бы сообщить, сколько продуктов и их количество потребуется для выполнения той же услуги.

Моя проблема в том, что я использую ModelForm для отобразить мою форму, но с этим я просто могу выбрать один продукт в поле items (это внешний ключ Inventory) и не могу сообщить, сколько элементов потребуется. Итак, я бы хотел, чтобы мой пользователь выбрал один или несколько продуктов из моего инвентаря и сообщил, сколько их ему потребуется для завершения обслуживания. Я читал о наборе форм и, похоже, это то, что мне нужно, но я не могу понять, как вставить свой код или внутри моей модели modelForm.

модели инвентаря:

class Inventory(models.Model):
    name= models.Charfield(max_lenght=100)
    description = models.TextField()
    quantity = models.PositiveIntegerField()
    ......
    

модели обслуживания:

class Service(models.Model):
    name = models.Charfield(max_length=100)
    items = models.ForeignKey(Inventory, on_delete=models.DO_NOTHING)
    description = models.TextField()
    date= models.DateField(default=datetime.date.today)
    ....

просмотры:

class CreateServiceView(CreateView):
    model = Service
    form_class = ServiceModelForm
    template_name = 'service/create_service.html'
    success_url = reverse_lazy('service:list_service')

шаблон:

{% extends 'base.html' %}
{% load bootstrap4 %}

{% block content %}
<form method="post">
    {%csrf_token %}
    <table class="table">
        {{ form }}
    </table>
    <tr>
        <td>
            <a href="service:list_service">
                <button type="submit" class="btn btn-primary">Save</button>
            </a>
            <a href="#">
                <button type="reset" class="btn btn-primary">Cancel</button>
            </a>
        </td>
    </tr>

</form>
{% endblock %}

Мне нужно изменить это поле на что-то, что я бы выбрал элемент и укажите количество.

Предметы из моего инвентаря

1 Ответ

0 голосов
/ 06 августа 2020

Основываясь на том, как вы назвали свою переменную items с буквой «s», я понимаю, что вы хотите использовать одну и ту же службу для нескольких инвентаризаций, верно?

В этом случае вы не можете использовать items = models.ForeignKey(Inventory, ...) в Service. Вместо этого используйте service = models.ForeignKey(Service, ...) в Inventory.

Таким образом, каждый объект Inventory связан ровно с одним объектом Service. Затем вы можете получить доступ ко всем инвентарным объектам определенной службы c, выполнив service.inventory_set.all()

...