@Uttar

Как правильно написать представление для обработки формы и создания объекта модели?

Помогите с затыком, пожалуйста.
Есть модели:
class Contract(models.Model):
	...
    responsible = models.ManyToManyField(Responsible, blank=True)
	...

class Responsible(models.Model):
    Responsible_name = models.CharField(max_length = 50)

class Resp_status(models.Model):
    responsible = models.ForeignKey(Responsible)
    approval = models.BooleanField(default = False)
    contract = models.ForeignKey(Contract, null = True)


Есть форма для модели Contract для создания контракта. Как сделать, что бы при создании контракта для каждого из выбранных Responsible создавался Resp_status?
Пытаюсь сделать так:

def new_contract(request, pk):
    partner = Partner.objects.get(id=pk)
    if request.method == 'POST':
        form = NewContractForm(request.POST)
        if form.is_valid():
            contract = form.save(commit=False)
            contract.partner = partner
            contract.save()
            for resp in contract.responsible.all():
                status.responsible = resp
                status.contract = contract.id 
                status.save()

Получается, мы заполняем форму, создаётся Contract и после его создания надо создать статусы для всех выбранных responsible.
И совершенно не получается сформулировать запрос для гугла, что бы найти решение. Возможно, я изначально как-то неправильно подхожу к решению задачи?
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 2
@StasShk
Может просто вот так?
...
    for resp in contract.responsible.all():
            s = Resp_status.objects.create(responsible=resp,  contrac =contract.id)
            s.save()
Ответ написан
FeNUMe
@FeNUMe
У вас в функции уже есть список всех ответственных в contract.responsible, зачем вы делаете доп. запрос в базу на его получение?
resp_status_all=[]
for r in contract.responsible:
    resp_status_all.append(Resp_status(responsible=r,  contract = contract.id))
Resp_status.objects.bulk_create(resp_status_all)

Но как правильно заметил sim3x ваш код оставляет желать лучшего: как минимум почитайте джанговский code guide чтобы правильно называть сущности; так же внимательно пересмотрите логику своего приложения на наличие зацикленных запросов в базу и замените их либо на bulk_create, либо на вручную собранные запросы из Q(), чтобы не грузить базу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы