Witam,
chciałbym w Django zrobić w dodaniu rekordu wyszukiwanie danych powiązanych i wybranie ich (i to mi działa), a jak nie istnieją to stworzenie ich. Np mam model:
models.py:
class Kontrahent(models.Model):
nazwa = models.CharField(max_length=32)
def __str__(self):
return self.nazwa
class Zlecenie(models.Model):
nrZleceniaKlienta = models.CharField('Nr zlecenia klienta', max_length=64, blank=True)
dataPrzyjeciaZlecenia = models.DateField('Data przyjęcia zlecenia', error_messages=my_default_errors)
klientGrupy = models.ForeignKey(Kontrahent, null=True, related_name='%(class)s_klient_grupy', verbose_name='Klient grupy:')
forms.py:
class ZlecenieForm(forms.ModelForm):
klientGrupy = forms.CharField(max_length=32)
class Meta:
model = Zlecenie
fields = ['nrZleceniaKlienta', 'dataPrzyjeciaZlecenia', 'klientGrupy']
views.py:
def ZlecenieAdd(request):
if request.method == 'POST':
form = ZlecenieForm(request.POST)
if form.is_valid():
klientGrupy, created = Kontrahent.objects.get_or_create(nazwa=form.cleaned_data['klientGrupy'])
zlecenie = form.save(commit=False)
zlecenie.klientGrupy = klientGrupy
zlecenie.save()
else:
form = ZlecenieForm()
context = { "form": form, }
return render(request, 'zlecenia/zlecenie_form.html', context)
zlecenie_form:
{% extends 'zlecenia/base.html' %}
{% block styles %}
<script>
$("#id_klientGrupy").autocomplete({
source: "/api/kontrahent/",
minLength: 2,
});
</script>
{% endblock %}
{% block body %}
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
{{ field.label_tag }} {{ field }}<br />
{% endfor %}
<button type="submit">Zapisz</button>
</form>
{% endblock %}
^^^ aktualnie wywala się na form.is_valid(): Cannot assign "'XYZ'": "Zlecenie.klientGrupy" must be a "Kontrahent" instance.
ps: googlam już 3 dzień i testowałem wiele przykładów, ale zawsze się wywala na is_valid() ;)