Как связать формы в django друг с другом? - PullRequest
0 голосов
/ 13 июля 2020

Народ помогите пожалуйста! Мучаюсь с этим всю неделю. В общем, у меня есть две формы на одной странице, одна форма должна автоматически заменять имя блока, в котором мы находимся (этот работает), а вторая должна, в зависимости от того, в каком блоке мы находимся в выборе, предоставлять параметры для выбор категорий только этого блока.

мои просмотры

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

мои модели

# 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

мои формы

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

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

мои URL

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

мой 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>

1 Ответ

1 голос
/ 16 июля 2020

django -autocomplete-light - это решение!

...