У меня есть два выпадающих меню, которые зависят друг от друга. В первом выпадающем списке можно выбрать годовой номер обслуживания. Во втором выпадающем меню можно выбрать соответствующие интервалы.
Теперь я хотел бы сохранить фактические месяцы обслуживания в базе данных с предварительно установленными флажками. Для этого я создал таблицу со всеми месяцами года и установил слишком много связей с возможными интервалами.
Как можно предварительно установить флажки в зависимости от возможностей интервала?
Я надеюсь, что это понятно, и спасибо за вашу помощь. Вот мой код:
models.py
ss Systems(models.Model):
systemUUID = models.CharField(max_length=30)
idNum = models.CharField( max_length=50)
postalcode = models.CharField(max_length=10, blank=True)
city = models.CharField(max_length=50, blank=True)
street = models.CharField(max_length=150, blank=True)
fitter_mailaddress = models.EmailField(blank=True)
general_mailaddress = models.EmailField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
personnel_maintenance_per_year = models.ForeignKey(Personnel_maintenance_per_year, on_delete=models.SET_NULL, null=True)
select_the_maintenance_months = models.ForeignKey(Select_the_maintenance_months, on_delete=models.SET_NULL, null=True)
jan = models.BooleanField()
feb = models.BooleanField()
mar = models.BooleanField()
apr = models.BooleanField()
may = models.BooleanField()
jun = models.BooleanField()
jul = models.BooleanField()
aug = models.BooleanField()
sep = models.BooleanField()
oct = models.BooleanField()
nov = models.BooleanField()
dec = models.BooleanField()
def __str__(self):
return self.systemUUID
def get_absolute_url(self):
return reverse('systems-detail', kwargs={'pk': self.pk})
form.py
(в настоящее время не используется)
class SystemForm(forms.ModelForm):
class Meta:
model = Systems
fields = ['systemUUID', 'idNum', 'postalcode', 'city', 'street', 'fitter_mailaddress', 'general_mailaddress']
jan = forms.BooleanField(required=False, initial=True)
feb = forms.BooleanField(required=False, initial=True)
mar = forms.BooleanField(required=False, initial=True)
apr = forms.BooleanField(required=False, initial=True)
may = forms.BooleanField(required=False, initial=True)
jun = forms.BooleanField(required=False, initial=True)
jul = forms.BooleanField(required=False, initial=True)
aug = forms.BooleanField(required=False, initial=True)
sep = forms.BooleanField(required=False, initial=True)
oct = forms.BooleanField(required=False, initial=True)
nov = forms.BooleanField(required=False, initial=True)
dec = forms.BooleanField(required=False, initial=True)
view.py
class SystemCreateView(LoginRequiredMixin, CreateView):
model = Systems
fields = ['systemUUID', 'elevatorNum', 'postalcode', 'city', 'street', 'fitter_mailaddress',
'general_mailaddress', 'personnel_maintenance_per_year', 'select_the_maintenance_months', 'jan',
'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def load_cities(request):
personnel_maintenance_per_year_id = request.GET.get('personnel_maintenance_per_year')
maintenance_months = Select_the_maintenance_months.objects.filter(personnel_maintenance_per_year_id=personnel_maintenance_per_year_id).order_by('name')
ids = []
for month in maintenance_months:
print('Maintenance Month PK ',month.pk)
mon = Months.objects.filter(maintenance_months__name__contains=month)
print(mon)
#m2m = User.select_the_maintenance_months_months.through.objects.filter(select_the_maintenance_months_id=month.pk)
#print('Relations ',m2m)
return render(request, 'users/city_dropdown_list_options.html', {'maintenance_monthses': maintenance_months})#, 'month': mon})
dropdown_list.html
<option value="">---------</option>
{% for maintenance_months in maintenance_monthses %}
<option value="{{ maintenance_months.pk }}">{{ maintenance_months.name }}</option>
{% endfor %}
new_system_form.html
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST" id="systemsForm" data-cities-url="{% url 'ajax_load_cities' %}" novalidate>
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">New System</legend>
{{ form.as_table }}
</fieldset>
<legend class="border-bottom mb-4"></legend>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Save</button>
<a class="btn float-right btn-secondary btn-sm mt-1 mb-1" href="{% url 'list-systems' %}">Back</a>
</div>
</form>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$("#id_personnel_maintenance_per_year").change(function () {
var url = $("#systemsForm").attr("data-cities-url");
var personnel_maintenance_per_yearId = $(this).val();
$.ajax({
url: url,
data: {
'personnel_maintenance_per_year': personnel_maintenance_per_yearId
},
success: function (data) {
$("#id_select_the_maintenance_months").html(data);
}
});
});
</script>
</div>
{% endblock content %}