Django, почему он не публикуется в db?
Сделал зависимое выпадающее меню, но оно не отправляется в базу данных. Что я делаю не так?
Также, возможно ли поместить это в другую таблицу? Дело в том, что у меня есть 5 одинаковых форм на одной странице, каждая со своим OrderForm, модель подобная этой с именами от 1 до 5. Но она не будет публиковаться независимо от того, использую ли я 1 форму на странице или 5 форм на одной странице. Я бы предпочел, чтобы был способ использовать сырой sql и вставить эти данные формы в различные таблицы, отображая поля на определенные поля.
models.py
class OrderItem(models.Model):
vendor_name = models.ForeignKey(Vendor, on_delete=models.SET_NULL, null=True)
menu_name = models.ForeignKey(Menu, on_delete=models.SET_NULL, null=True)
date_created = models.DateTimeField('date created', auto_now_add=True)
note = models.CharField('note', max_length=255, null=True, blank=True)
forms.py
class OrderForm(forms.ModelForm):
note= forms.CharField(widget=forms.Textarea)
class Meta:
model = OrderItem
fields = ('vendor_name', 'menu_name', 'note')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['menu_name'].queryset = Menu.objects.none()
self.fields['vendor_name'].widget.attrs['style'] = 'width:250px; height:25px;'
self.fields['menu_name'].widget.attrs['style'] = 'width:250px; height:25px;'
self.fields['note'].widget.attrs['style'] = 'width:250px; height:100px; resize:none;'
views.py
def save_order(request):
form = OrderForm()
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
return render(request, '/order_info.html', {'form': form})
order_info.html
<div class="">
<form method="post" id="order_Form2" class="form2" menus-url="{% url 'ajax_load_menus' %}">
{% csrf_token %}
{{ form.as_p }}
{% bootstrap_button 'Pick' button_type='submit' button_class='btn-primary btn-sm mb-2'%}
<a class="btn btn-danger btn-sm ml-2 mb-2" href="{% url 'order-page' %}">Reset</a>
</form>
<script>
$("#order_Form2 #id_vendor_name").change(function () {
var url = $("#order_Form2").attr("menus-url");
var vendorId = $(this).val();
$.ajax({
url: url,
data: {
'vendor_name': vendorId
},
success: function (data) {
$("#order_Form2 #id_menu_name").html(data);
}
});
});
</script>
</div>
load_menu.html
<option value="">---------</option>
{% for menu in menus %}
<option value="{{ menu.pk }}">{{ menu.menu_name }}</option>
{% endfor %}
url.py
urlpatterns = [
path("order_info", views.OrderView, name="order-page"),
path('ajax/load_menus/', views.load_menus, name='ajax_load_menus'), # AJAX\
path('/', views.save_order, name="save_order"),
]
Ваш код django выглядит хорошо. Я думаю, что проблема в том, что вам все еще нужно добавить "type" в jquery:
$.ajax({
// ADD "type"
type:'POST'
url: url,
data: {
'vendor_name': vendorId
},
success: function (data) {
$("#order_Form2 #id_menu_name").html(data);
}
});