Reputation: 23
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