Найти - Пользователи
Полная версия: Django автозаполнение ForeignKey при создании связанной модели
Начало » Python для новичков » Django автозаполнение ForeignKey при создании связанной модели
1
Cache
Приветствую. Прошу помощи, не могу реализовать автозаполнение ForeignKey в object_d при создании связанной модели. Создается объект и к нему добавляются договора, которые связанные с объектом. Так вот при создании договора, у меня список со всеми объектами, а мне хотелось бы, чтобы объект автоматически выбирался исходя из того, в каком объекте я нахожусь и нажимаю кнопку создать договор.

Пример кода:
models.py
 class BaseObject(models.Model):
    adress_object = models.CharField(max_length=100, blank=False, verbose_name='Адрес объекта', db_index=True, null=False)
    slug = models.SlugField(unique=True, blank=True, null=True, editable=False)
class Dogovor(models.Model):   
    object_d = models.ForeignKey(BaseObject, on_delete=models.PROTECT, verbose_name='Объект', db_index=True)
    num_contract = models.CharField(max_length=20, blank=False, verbose_name='Номер договора', db_index=True, null=False)

views.py
 class DogovorCreateView(CreateView):
    model = Dogovor
    template_name = 'realestateworks/dogovor_create.html'
    form_class = DogovorForm
    success_url = '/realestateworks/'

dogovor_create.html
[code html+django]
{% extends "base_realestateworks.html" %}

{% block content %}
<div class="address">
<h1>Форма для нового договора по объекту</h1>
<form class="js-form-address" method="post">
{% csrf_token %}
{% for field in form %}
<div class="field">
{{ field.label }}
{{ field }}
</div>
{% endfor %}
<input type="submit" value="Создать">
</form>
</div>
{% endblock %}
[/code]

FishHook
Cache
Джанга не сделает этого автоматически. Не смотря на то, что ваше описание задачи довольно неочевидное, кажется, это довольно популярный вопрос. Важная вещь, которую надо понять про Джанго, это чисто серверный фреймворк, он не добавляет никакой клиентской логики. Насколько я понимаю, у вас есть форма с селектом, и выбрав какой-то элемент селекта, вы хотите, чтобы на основании этого выбора на странице присутствовали объекты другой модели релевантные для выбранной позиции. Чтобы этого добиться, вам нужно одно из:
1) Можно сделать двухэтапную страницу. Первый этап - рендерится форма с селектом. После выбора строки в селекте, страница перенаправляется на тот же адрес, но с URLом содержащим айдишник выбранной позиции. После чего рендерится форма с тем же селектом, но с выбраной строкой и появляются дополнительные поля.
2) Используйте AJAX, рендерить HTML на сервере давно уже не модно. Ваш сайт может отдавать на клиента не формы с заполненными данными, а только данные в JSON формате, а всю работу по отрисовке делает JS

в любом случае, вам понадобится писать клиентский JavaScript
Cache
Вопрос закрыт, решение нашел в сети, исправил views.py:
views.py

 class DogovorCreateView(CreateView):
template_name = 'realestateworks/dogovor_create.html'
form_class = DogovorForm

def form_valid(self, form):
object_d = BaseObject.objects.get(slug=self.kwargs['slug'])
form.instance.object_d = object_d
return super(DogovorCreateView, self).form_valid(form)

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB