여러 스레드에서 가능한 모든 솔루션을 시도했지만 여전히 문제를 해결할 수 없습니다. 나는 다음과 같은 코드가 있습니다ModelChoiceField는 "올바른 선택 항목을 선택하십시오"Ajax 호출로 선택 입력하기
models.py를
class CustomerVisit(models.Model):
start_date = models.DateField()
end_date = models.DateField()
customer = models.ForeignKey(Customer)
address = models.ForeignKey(Address)
forms.py
address = forms.ModelChoiceField(label='Address',
queryset=Address.objects.none(),
widget=forms.Select(attrs={'style': 'width: 100%;'}))
customer = forms.ModelChoiceField(label='Customer',
queryset=Customer.objects.all(),
widget=forms.Select(attrs={'style': 'width: 100%;'}))
views.py
if request.method == "POST":
# Cleaning fields
post = request.POST.copy()
post['address'] = Address.objects.get(id=post['address'])
post['start_date'] = dateparser.parse(post['start_date'])
post['end_date'] = dateparser.parse(post['end_date'])
# Updating request.POST
request.POST = post
form = CustomerVisitForm(request.POST)
if form.is_valid():
form.save(commit=True)
return redirect("customervisit:calendar")
JS
$("#id_customer").select2({}).on("change", function() {
var customer_id = $("#id_customer").val();
var id_address = $("#id_address");
id_address.select2({
ajax: {
url: '/get_customer_address/' + customer_id,
dataType: "json",
type: "GET",
data: function (params) {
var queryParameters = {
term: params.term
}
return queryParameters;
},
processResults: function (data) {
return {
results: $.map(data, function (item) {
return {
text: item.text,
id: item.id
}
})
};
}
}
});
});
내 address
선택의 존재가 ajax call using select2를 사용 customer
선택에 따라 채워집니다. post['address'] = Address.objects.get(id=post['address'])
하지만 난 아직도 내가 사용하고있어 Select a valid choice. That choice is not one of the available choices.
오류
받고 있어요 : 여러 스레드를 읽은 후 나는 형태가 검증되고 전에 내가보기에 다음 코드를 사용하고 있는데 그 이유는 그래서 modelchoicefield
는 Address
객체를 기대하는 눈치 queryset=Address.objects.none(),
빈 선택이 필요하기 때문에
이렇게해서는 안됩니다. 모든 논리는 형태로 진행되어야합니다. –
@DanielRoseman 나는 청소 분야에 대해 이야기하고 있다고 생각합니까? 그렇다면 이것을 바꿀 수있는 TODO가 있습니다. 덕분에 –
하지만 요점은 당신이 주소 필드에 대한 그 변환을하고 싶지 않다는 것입니다. 왜 인스턴스가 필요하다고 생각하는지 모르겠지만 폼 필드의 모든 점은 POST 데이터를 가져 와서 적절한 유형으로 변환한다는 것입니다. –