У меня есть разные модели в классе и их подклассах - и я хочу создать форму для всех из них - я знаю, что могу сделать это с одной страницей для каждой из них, но есть ли разумный способ сделать это ?
models.py:
class ProductBase(models.Model):
name = models.CharField('Name', max_length=120)
price = models.DecimalField("Per part", decimal_places=2, max_digits=6)
class Software(ProductBase):
link = models.URLField('Download Link', blank=True)
class Hardware(ProductBase):
shipping_cost = models.DecimalField("UPS", decimal_places=2, max_digits=6)
forms.py:
class ProductForm(ModelForm):
required_css_class = "required"
class Meta:
model = Product
fields = "__all__"
views.py:
def add_part(request):
submitted = False
if request.method == "POST":
form = ProductForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect("add_product/?submitted=True")
else:
form = ProductForm()
if "submitted" in request.GET:
submitted = True
return render(request, "add_product.html", {"form": form, "submitted": submitted})
add_product. html:
{% extends 'base.html' %}
{% block content %}
{% if submitted %}
<p class="success">Part was saved successfully.</p>
{% else %}
<form action="" method="post" novalidate>
<table>
{{ form.as_table }}
<tr><td><input type="submit" value="Submit"></td></tr>
</table>
{% csrf_token %}
</form>
{% endif %}
{% endblock content %}
Таким образом я создаю форму для сохранения продукта в базе данных, вероятно, самым простым способом. Есть ли способ получить что-то вроде раскрывающегося меню, которое позволяет мне выбирать между software
, hardware
и None
.
После того, как я выбрал тип, я хотел бы показать пользователю соответствующие атрибуты и сохраните их в базе.