Эрик
Эрик

Reputation: 23

How to connect forms in django with each other?

People please help! I’ve been tormented with this all week. In general, I have two forms on one page, one form should automatically substitute the name of the block in which we are located (this one works), and the second should, depending on which block we are in the select, provide options for choosing categories of only this block.

my views

class AddTable(SuccessMessageMixin, CreateView):
model = TableCategory
form_class = TableCategoryForm
second_form_class = TableItemsForm
template_name = 'forms/table_add.html'
success_url = '.'
success_message = "Категория таблицы успешно добавленна"

def get_initial(self):
    initial = super(AddTable, self).get_initial()
    initial['block'] = CreateBlock.objects.get(pk=self.kwargs['pk'])
    return initial

def get_context_data(self, **kwargs):
    context = super(AddTable, self).get_context_data(**kwargs)
    context['tablecat'] = TableCategory.objects.filter(block=self.kwargs['pk'])
    context['tableitem'] = TableItems.objects.all()

    #if 'formcat' not in context:
    #    context['formcat'] = self.form_class()
    if 'form2' not in context:
        context['form2'] = self.second_form_class()
    return context

my models

# tables models
class TableCategory(models.Model):
""" table category  """
    block = models.ForeignKey(CreateBlock, on_delete=models.CASCADE, 
    related_name='blocktablecat', default=0)
    category = models.CharField(max_length=50)

    def __str__(self):
        return self.category

    class Meta:
        verbose_name = 'Категория таблицы'
        verbose_name_plural = 'Категории таблицы'

class TableItems(models.Model):
""" table items  """
    category = models.ForeignKey(TableCategory, related_name='tableitems', 
on_delete=models.PROTECT)
    name = models.CharField(max_length=50)
    price = models.SmallIntegerField(default=0)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Содержимое таблицы'
        verbose_name_plural = 'Содержимое таблицы'

class CreateBlock(models.Model):
""" blocks  """
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, 
verbose_name='Пользователь')
    name = models.CharField("Название блока", max_length=100)
    close = models.BooleanField(default=False)
    order = models.SmallIntegerField(default=0, db_index=True)

    def __str__(self):
        return self.name

my forms

class TableCategoryForm(forms.ModelForm):
    class Meta:
        model = TableCategory
        fields = '__all__'
        #widgets = {'block': forms.HiddenInput}

class TableItemsForm(forms.ModelForm):
    class Meta:
        model = TableItems
        fields = '__all__'

my urls

path('block/<int:pk>/add/table/', views.AddTable.as_view(), name='add_table'),

my html

<form method="post">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-primary btn-sm waves-effect waves- 
light">Добавить</button>
</form>
</div>
<div class="col-md-7">
<form method="post">
{% csrf_token %}
{{ form2|crispy }}
<button type="submit" class="btn btn-primary btn-sm waves-effect waves- 
light">Добавить</button>
</form>
</div>
</div>

Upvotes: 0

Views: 63

Answers (1)

Эрик
Эрик

Reputation: 23

django-autocomplete-light is a solution!

Upvotes: 1

Related Questions