如何传递选择框的值作为外键(Django)



嗨,我正在开发一个Django web应用程序——我有一个选择框,其中包含特定模型中的所有对象。选择框是在模板中创建的,它不是表单的一部分。当我提交时,我可以访问用户选择的值,但当我尝试将该值用作查询集的一部分时,它不会返回期望的值。

型号.py

class TaskGroup(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return self.name
class TaskGroupDetail(models.Model):
taskGroup = models.ForeignKey(TaskGroup, null=True, blank=True)
taskType = models.ForeignKey(TaskType, null=False, blank=False)

views.py

def CreateShipmentView(request):
if request.method == 'POST':
shipment_form = CreateShipmentForm(request.POST)
if shipment_form.is_valid():
new_shipment = shipment_form.save()
group = request.POST.get('groups') #get the task group selected
print(group) #this returns the expected value

.....

#if a task group was added, create the tasks
groupDetails = TaskGroupDetail.objects.get(taskGroup = group) #this returns a blank queryset
print(groupDetails) #this returns a blank queryset
return redirect('ShipmentListView')
...
else:
shipmentForm = CreateShipmentForm()
groups = TaskGroup.objects.all()
context = {
'shipmentForm': shipmentForm,
'groups': groups,
}
return render(request, 'create-shipment.html', context)

create-shippment.html

<form  class="well contact-form" method="POST" action="{% url 'CreateShipmentView' %}">
{% csrf_token %}
<div class="modal-content">
<div class="modal-header">
{% for error in form.Reference_Number.errors %}
<P class='error'>{{ error }}</p>
{% endfor %}
<h5 class="modal-title">New Shipment</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
{{shipmentForm|crispy}}
</div>
<div>
<select id="groups" name='groups' class="custom-select custom-select-sm input-small" style="width: 100%;"> Task Group
{% for item in groups %}
<option>{{item}}</option>
{% endfor %}
</select>
</div>
<div class="modal-footer">
<button  type="submit" class="btn btn-default">Submit</button>
<button  value="" type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</form>

当我print(group)时引用上面的代码,我得到了我期望的值,并且我可以看到该值与我试图在查询集中返回的对象的taskGroup字段匹配。我认为这与值从select传递到视图的方式有关(就像它不是TaskGroup对象之类的(,但我真的不确定在这一点上该怎么解决。有什么想法吗?

由于Group被分配了TaskGroup的名称,因此不使用get(TaskGroup=Group(。则其get(taskGroup__name=group(访问taskGroup name属性。

最新更新