Народ пожалуйста помогите! Всю неделю с этим мучаюсь.
Вообщем у меня две формы на одной странице, одна форма должна автоматом в селекте подставлять название блока в котором мы находимся (это работает), а вторая должна в зависимости в каком блоке мы находимся в селекте предоставить варианты выбора категорий только этого блока, надеюсь понятно объяснил.
# views.py file # views.py file # views.py file # views.py file # views.py file # views.py file
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
# forms.py file # forms.py file # forms.py file # forms.py file # forms.py file # forms.py file
class TableCategoryForm(forms.ModelForm):
class Meta:
model = TableCategory
fields = '__all__'
#widgets = {'block': forms.HiddenInput}
class TableItemsForm(forms.ModelForm):
class Meta:
model = TableItems
fields = '__all__'
# models.py file # models.py file # models.py file # models.py file # models.py file # models.py file
# 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 = 'Содержимое таблицы'
# urls.py file # urls.py file # urls.py file # urls.py file
path('block/<int:pk>/add/table/', views.AddTable.as_view(), name='add_table'),
# html file # html file # html file # html file # html file
<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>
<div class="box-content">
{% if tablecat %}
{% for cat in tablecat %}
<table class="table table-striped">
<p class="table_head">{{ cat.category }}</p>
{% for item in cat.tableitems.all %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.price }} руб</td>
</tr>
{% endfor %}
</table>
{% endfor %}
{% else %}
<p>Вы еще не создали объектов для таблицы. Заполните формы выше.<br/>
Сначала создайте категорию для определенных объектов, затем добавьте сами объекты в созданную категорию и т.д.</p>
{% endif %}
</div>