我正在尝试在 Django 中提交表单之前获得选定的批准者并进行验证检查...事实证明这相当复杂...我已经完成了大部分工作...但是不能似乎弄清楚如何“获取”在 Django 模板中翻译的 ID...我已经获得了 ID...但似乎无法建立最终的连接...
这是我的 AJAX...
$("#avail").on("click", function(event) {
var modalavail = document.getElementById("myModalavail");
var markedCheckbox = document.querySelectorAll('input[type="checkbox"]:checked');
event.preventDefault();
$(window).unbind('beforeunload');
$.ajax({
method: 'get',
headers: { "X-CSRFToken": token },
url: "",
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
success: function(resp) {
modalavail.style.display = "block";
for (var checkbox of markedCheckbox) {
console.log(checkbox.value + ' ');
}
},
error: function (request, status, error) {
console.log(request.responseText);
showAjaxFormErrors(JSON.parse(request.responseText));
$('html, body').animate({ scrollTop: 0 }, 50);
},
});
});
这是我的 HTML...
检查可用性
<div class="table56">
{% for entry in form.approvers %}
<table class="table57">
<thead>
<tr>
<th class="title156">Name</th>
<th class="title118">Available?</th>
</tr>
</thead>
<tbody>
<tr>
<td class="title156">{{ entry.name }}</td>
{% if not start_conflict or end_conflict or during_conflict %}
<td class="title117">Yes</td>
{% else %}
<td class="title117">No</td>
{% endif %}
</tr>
</tbody>
</table>
{% endfor %}
</div>
<input type="hidden" id="modal-approvers">
<button type="button" class="button210" id="modalcloseavail">Close</button>
</div>
这是我的表格...
class DailyPlannerForm(forms.ModelForm):
class Meta:
model = NewDailyPlannerEvent
exclude = [ 'created_by','summary']
def __init__(self, user, *args, **kwargs):
start_time = kwargs.pop('start_time', None)
User = get_user_model()
super(DailyPlannerForm, self).__init__(*args, **kwargs)
self.fields['approvers'] = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple(),
queryset=User.objects.exclude(Q(is_active=False)).order_by('last_name','first_name'),required=False)
def clean(self):
cleaned_data = super(DailyPlannerForm, self).clean()
approvers = cleaned_data.get('approvers')
这是我的模型......
class DailyPlannerEvent(models.Model):
STATUS_CHOICES = (
("AwaitingResponse","AwaitingResponse"),
("Cancelled","Cancelled"),
("Declined","Declined"),
("Delete","Delete"),
("Saved","Saved"),
("Scheduled","Scheduled"),
("Submitted","Submitted"),
)
STATUS_CHOICES1 = (
("Cancel","Cancel"),
)
STATUS_CHOICES3 = (
("True","True"),
("False","False"),
("N/A","N/A")
)
approver_by_department = models.ManyToManyField(Department,related_name="new_daily_planner_event_approver_by_department")
approvers = models.ManyToManyField(User)
created_by = models.ForeignKey(User,null=True,on_delete=models.CASCADE,related_name='new_daily_planner_event_created_by')
creation_date = models.DateTimeField(editable=False,null=True)
daily_planner_event_creation_date = models.DateTimeField(editable=False,null=True)
daily_planner_event_name = models.CharField(max_length=255,blank=True)
end_time = models.DateTimeField(null=True,blank=True)
last_update = models.DateTimeField(null=True)
request_type = models.CharField(choices=REQUEST_TYPE,default="New Daily Planner Event Request",max_length=35)
start_time = models.DateTimeField(null=True,blank=True)
status = models.CharField(choices=STATUS_CHOICES,default="Submitted",max_length=20)
submitted = models.CharField(choices=STATUS_CHOICES3,default="False",null=True,blank=True,max_length=20)
我最终计划做一些我认为的事情......
def get_context_data(self, **kwargs):
context = super(DailyPlannerEventView, self).get_context_data(**kwargs)
start_conflict = DailyPlannerEvent.objects.filter(
start_time__range=(dailyplannerevent.start_time,
dailyplannerevent.end_time,approver=user))
end_conflict = DailyPlannerEvent.objects.filter(
end_time__range=(dailyplannerevent.start_time,
dailyplannerevent.end_time,approver=user))
during_conflict = DailyPlannerEvent.objects.filter(
start_date__lte=dailyplannerevent.start_time,
end_date__gte=dailyplannerevent.end_time,approver=user)
context['start_conflict'] = start_conflict
context['end_conflict'] = end_conflict
context['during_conflict'] = during_conflict
return context
我现在的问题是 HTML 中的这一行....
{% for entry in form.approvers %}
我不知道如何“获取”在翻译为这一行的表单中选择的批准者...我试图获取上下文...它出现的行显然向我显示了我的每个条目批准者变量...我只想要用户选择的变量...然后我想在用户单击“显示可用性”按钮后在 HTML 中显示它们是否“可用”。
现在这相当复杂,但我很欣赏任何想法。
谢谢!
好吧,简短的答案就是我正在寻找的...是 APIVIEW...它允许您在提交表单之前显示表单值。
我做了类似的事情...
class AvailabilityCheckView(views.APIView):
def get(self, request):
approvers = self.request.GET.getlist('approvers[]')
start_time = self.request.GET.get('start_time')
end_time = self.request.GET.get('end_time')
然后从那里使用 Ajax 获取值并通过 Jquery 处理它们以将它们显示到屏幕上。