Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 29, 2021 13:57:37

Cache
Зарегистрирован: 2021-11-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Django автозаполнение ForeignKey при создании связанной модели

Приветствую. Прошу помощи, не могу реализовать автозаполнение 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]

Офлайн

#2 Ноя. 29, 2021 17:06:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django автозаполнение ForeignKey при создании связанной модели

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

в любом случае, вам понадобится писать клиентский JavaScript



Офлайн

#3 Ноя. 30, 2021 14:28:45

Cache
Зарегистрирован: 2021-11-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Django автозаполнение ForeignKey при создании связанной модели

Вопрос закрыт, решение нашел в сети, исправил 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version