Ben django-autocomplete-light kullanarak bu garip hatayı alıyorum: "Geçerli bir seçim yapın. Bu seçim kullanılabilir seçeneklerden biri değil. ." Ancak, aynı sayfada kalırsam ve tekrar Gönder'e basarsam, formda sorun yaratmaz ve formdaki veriler olması gerektiği gibi veritabanına eklenir."Geçerli bir seçim yap" hatası sadece ilk gönderiminde django-autocomplete-light'i kullanmayı deneyin
Başka bir Modelden eklenebilir satırlarla gömülü bir formum var. Bu modeller ile aynı BookSumbission sayfasında ve her bir Miktarı belirtilen her bir Kitap için birden fazla farklı Kitabın (ForeignKey aracılığıyla başka bir Kitap Modeline işaret ettiği) bir BookSubmission yapabilirim.
Pencere öğesi etkin olmadığında her şey iyi çalışıyor. Beklenen listeden bir veya daha fazla kitap seçebilirim. Widget'ı etkinleştirirseniz, her şey iyi çalışıyor gibi görünür, widget da beklenen Kitapları gösterir. Ancak, gönderirseniz hatayı alırım. Tekrar gönder düğmesine basın ve form kusursuz bir şekilde gönderilir.
Burada neler olup bittiği hakkında bir fikri olan var mı? Belki de .js dosyalarının yükleme sırası ile ilgili bir şey olduğunu düşündüm, ama onunla uğraşmak bana hiç sonuç vermedi.
models.py
class BookSubmission(models.Model):
SubmissionTitle = models.CharField(
max_length=6,
verbose_name="Submission Title",
unique=True)
SubmissionText = models.TextField(
max_length=1500,
null=True,
blank=True,
verbose_name="Submission Text"
)
class BooksAndQuantity(models.Model):
Submission = models.ForeignKey(
'Submission',
null=True,
blank=True,
verbose_name="BookSubmission"
)
Book = models.ForeignKey(
'Books',
to_field='BookTitle',
db_column='BookTitleID',
null=True,
blank=True,
)
Quantity = models.FloatField(verbose_name="Quantity")
class Books(models.Model):
BookTitle = models.CharField(
max_length=6,
unique=True,
db_column='BookTitleID')
BookText = models.TextField(
max_length=1500,
null=True,
blank=True
)
forms.py
class BookSubmissionForm(forms.ModelForm):
class Meta:
model = BookSubmission
fields = '__all__'
BookAndQuantityFormset = inlineformset_factory(
BookSubmission,
BookAndQuantity,
fields='__all__',
extra=1,
widgets={'Book':
autocomplete.ModelSelect2(url='BookAutocomplete')})
views.py aşağıdaki html dosyalarına ile
class BookSubmissionView(generic.CreateView):
template_name = 'BookSubmission.html'
model = BookSubmission
form_class = BookSubmissionForm
success_url = 'success/'
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates blank versions of the form
and its inline formsets.
"""
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
BookAndQuantityForm = BookAndQuantityFormset()
return self.render_to_response(
self.get_context_data(form=form,
BookAndQuantityForm=BookAndQuantityForm))
def post(self, request, *args, **kwargs):
"""
Handles POST requests, instantiating a form instance and its inline
formsets with the passed POST variables and then checking them for
validity.
"""
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
BookAndQuantityForm = BookAndQuantityFormset(self.request.POST)
if (form.is_valid() and BookAndQuantityForm.is_valid()):
return self.form_valid(form, BookAndQuantityForm)
else:
return self.form_invalid(form, BookAndQuantityForm)
def form_valid(self, form, BookAndQuantityForm):
"""
Called if all forms are valid. Creates a Recipe instance along with
associated Ingredients and Instructions and then redirects to a
success page.
"""
self.object = form.save()
BookAndQuantityForm.instance = self.object
BookAndQuantityForm.save()
specieandquantityout_form.instance = self.object
specieandquantityout_form.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, BookAndQuantityForm):
"""
Called if a form is invalid. Re-renders the context data with the
data-filled forms and errors.
"""
return self.render_to_response(
self.get_context_data(form=form,
BookAndQuantityForm=BookAndQuantityForm))
class BookAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
# if not self.request.user.is_authenticated():
# return Specie.objects.none()
qs = Books.objects.all()
if self.q:
qs = qs.filter(BookTitle__istartswith=self.q)
return qs
:
Parent.html
<head>
{% load staticfiles %}
<link rel="stylesheet" href="{% static 'personal/css/bootstrap.min.css' %}" type = "text/css"/>
<link rel="stylesheet" href="{% static 'personal/css/navbar-fixed-top.css' %}" >
<link rel="stylesheet" href="{% static 'personal/assets/ie10-viewport-bug-workaround.css' %}" >
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<meta name="viewport" content = "width=device-width, initial-scale=1.0">
<script src="{% static 'personal/assets/ie10-viewport-bug-workaround.js' %}"></script>
<script src="{% static 'personal/js/bootstrap.min.js' %}"></script>
<style type="text/css">
html,
body {
height:100%
}
</style>
</head>
BookSubmission.html
{% extends "parent.html" %}
{% load staticfiles %}
{% block content %}
<div>
<h1>Add BookSubmissionForm</h1>
<form action="" method="post">
{% csrf_token %}
<div>
<p> BookSubmission Title {{ form.SubmissionTitle }} </p>
<p> BookSubmission Text {{ form.SubmissionText }} </p>
</div>
<fieldset>
<legend>Book and Quantity</legend>
{{ bookandquantity_form.management_form }}
{{ bookandquantity_form.non_form_errors }}
{% for form in bookandquantity_form %}
{{ form.id }}
<div class="inline {{ bookandquantity_form.prefix }}">
{{ form.Book.errors }}
{{ form.Book.label_tag }}
{{ form.Book }}
{{ form.Quantity.errors }}
{{ form.Quantity.label_tag }}
{{ form.Quantity }}
</div>
{{ form.media }}
{% endfor %}
</fieldset>
<input type="submit" value="Add BookSubmission" class="submit" />
</form>
</div>
{% endblock %}
{% block footerContent %}
<script src="{% static 'MM/js/jquery.formset.js' %}"></script>
<script type="text/javascript">
$(function() {
$(".inline.{{ bookandquantity_form.prefix }}").formset({
prefix: "{{ bookandquantity_form.prefix }}",
})
})
</script>
{% endblock %}
urls.py
url(r'^BookAutoComplete/$',
views.BookAutoComplete.as_view(),
name='BookAutoComplete'),
düzenlemek başka ne garip şu, ben başka Ekle" itme ilk kez
"formda bu görünüyor. Aşağıdaki resimde aynı Formset iki kez eklenmiştir (şimdi "Türler ve Quanity" olarak adlandırılır. & Çıkış).
"Farklı Türler" i tıklamaksızın "Türler ve Miktar İçindekiler" ifadesi görüntülendiğinde "Tür ve Miktar Çıkışı" bölümünde "Başka Ekle" yi tıklattım ve ilk satırın buggy olduğunu görebiliyorsunuz. satır boş bir işe yaramaz alan eklenir.
BookAutocomplete URL'si ve görünümü tanımlandı? – jpic
'BookAndQuantityForm = KitapAndQuantityFormset (self.request.POST) if (form.is_valid() ve BookAndQuantityForm.is_valid():' bu nedir? – jpic
Üzgünüz, bu yazıya her şeyi koymadım. bölüm – ThomasKlont