Форум сайта python.su
Приветствую. Прошу помощи, не могу реализовать автозаполнение 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)
class DogovorCreateView(CreateView): model = Dogovor template_name = 'realestateworks/dogovor_create.html' form_class = DogovorForm success_url = '/realestateworks/'
[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]
Офлайн
Cache
Джанга не сделает этого автоматически. Не смотря на то, что ваше описание задачи довольно неочевидное, кажется, это довольно популярный вопрос. Важная вещь, которую надо понять про Джанго, это чисто серверный фреймворк, он не добавляет никакой клиентской логики. Насколько я понимаю, у вас есть форма с селектом, и выбрав какой-то элемент селекта, вы хотите, чтобы на основании этого выбора на странице присутствовали объекты другой модели релевантные для выбранной позиции. Чтобы этого добиться, вам нужно одно из:
1) Можно сделать двухэтапную страницу. Первый этап - рендерится форма с селектом. После выбора строки в селекте, страница перенаправляется на тот же адрес, но с URLом содержащим айдишник выбранной позиции. После чего рендерится форма с тем же селектом, но с выбраной строкой и появляются дополнительные поля.
2) Используйте AJAX, рендерить HTML на сервере давно уже не модно. Ваш сайт может отдавать на клиента не формы с заполненными данными, а только данные в JSON формате, а всю работу по отрисовке делает JS
в любом случае, вам понадобится писать клиентский JavaScript
Офлайн
Вопрос закрыт, решение нашел в сети, исправил 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)
Офлайн