django Как из одной таблицы взять данные и передать в другую таблицу?
Только только начал изучать Python&Django и возник вопрос. Есть таблица trmx с столбцами name и quantity. Есть таблица trsx_q с столбцами name , quantity ,city . Мне надо при нажатие кнопки "send" данные с таблицы trmx сохранились в таблице trsx_q. Но чтоб я мог менять только столбец quantity. После этого в таблице trmx уменьшились quantity . Например таблица trmx с данными name:товар1 quantity:140. Нажимаю кнопку "send" открывается окно меняю только столбец quantity например:10 и добавляю city:Москва он сохраняется в таблице trsx_q. В таблице trmx name:товар1 quantity:130(данные уменьшился).Надеюсь нормально объяснил .Можно такое реализовать?
def trmxviews(reguest):
trmx = trmx.objects.all()
return render(reguest, 'main/maintr.html', {'trmx ': trmx})
def trsx_qviews(reguest):
trsx_q = trsx_q.objects.all()
return render(reguest, 'main/trsqviews.html', {'trsx_q ': trsx_q})
class trmx(models.Model):
name = models.CharField('Названия')
quantity = models.IntegerField('Количество')
def __str__(self):
return self.name
class Meta:
verbose_name = 'Товар_общая'
verbose_name_plural = 'Товар_общая'
class trsx_q(models.Model):
name = models.CharField('Названия')
quantity = models.IntegerField('Количество')
city = models.CharField('Город')
def __str__(self):
return self.name
class Meta:
verbose_name = 'Город_распределения'
verbose_name_plural = 'Город_распределения'
создал класс для модели trmx
class trxmdetail(DetailView):
model = trmx
template_name = 'main/trxdetail.html'
context_object_name = 'protrx'
создал форму для trsx_q
class trsx_qForm(ModelForm):
class Meta:
model = trsx_q
fields = ['name', 'quantity', 'city']
widgets ={
"name": TextInput(attrs={
'class': 'form-control',
'placeholder': 'Название',
}),
"quantity": TextInput(attrs={
'class': 'form-control',
'placeholder': 'Количеств',
}),
"city": TextInput(attrs={
'class': 'form-control',
'placeholder': 'Город',
}),
}
функция для сохранения данных в таблице trsx_q
def createtrsx_q(reguest):
error = ''
if reguest.method == 'POST':
form = trsx_qForm(reguest.POST)
if form.is_valid():
form.save()
return redirect('/main/home')
else:
error = 'Форма неправильно заполнено'
form = trsx_qForm()
data = {
'form': form,
'error': error
}
return render(reguest, 'main/createtrx_q.html', data)
И функция для сохранение данных в табл данных trsx_q
class trxm_tupdate(UpdateView):
model = trmx
template_name = 'main/createtrx_q.html'
form_class = trsx_qForm
#createtrx_q
{% block content %}
<div class="features">
<h1 style="font-size: 20px; text-align: center;">Добавления</h1>
<form method="post">
{% csrf_token %}
{{ form.id }}
<span style="font-size: 2px; background: red;">{{ form.name }}</span>
{{ form.quantity }}
{{ form.city }}
<span style="font-size: 20px;">{{ error }}</span>
<button class="btn btn-success" type="submit">Добавить запись</button>
</form>
</div>
{% endblock %}
Последняя функция не правильно работает. Он берет данные с таблицы trmx и открывается форма для таблицы trsx_q , но самом таблице trsx_q данные не сохраняет а обновляет таблицу trmx. Подскажите как исправить
Ответы (1 шт):
Напишите класс формы для работы с моделями Form, ModelForm
В методе save() формы укажите необходимую вам логику.
Поиск по объектам - <Model>.objects.filter(name="<value>")
Этого достаточно, чтобы решить вашу задачу.
А если подробнее:
- создайте
viewдля этого действия - создайте форму, выводите ее на странице
- в форме укажите
action="..."наviewс обработкой формы. Если совпадает с текущей страницей, можете оставить пустым - в
saveформы ваша логика - всё