Как подставить значение в поле формы из базы данныхPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как подставить значение в поле формы из базы данных

Сообщение Anonymous »


У меня есть похожие модели; при их сохранении одни данные сохраняются в первой модели, другие — во второй. Сейчас пытаюсь обновить данные, чтобы при нажатии кнопки обновлялись данные из двух моделей, так как поля в виде "имя_клиента" и "телефоны" ни с чем не связаны, я этого частично добился, они обновляются и сохраняются, но при открытии формы поля "имя_клиента", "телефоны", мне нужно как-то подставить в эти поля ранее сохраненные значения, чтобы их можно было редактировать в поле.

models.py

из моделей импорта django.db из django.contrib.auth.models импортировать пользователя # Создайте здесь свои модели. класс Person(models.Model): client_name = models.CharField(max_length=100, verbose_name='Фио клиента') защита __str__(сам): вернуть self.client_name класс Мета: verbose_name = 'Клиент' verbose_name_plural = 'Клиенты' класс Телефон(модели.Модель): телефон = models.CharField(max_length=50, verbose_name='Телефон') contact = models.ForeignKey(Person, on_delete=models.CASCADE, linked_name='phones', verbose_name='Контакт', null=True) защита __str__(сам): вернуть себе телефон класс Мета: verbose_name = 'Телефон' verbose_name_plural = 'Телефоны' класс Orders(models.Model): # Основная база данных объекты = Нет автор = models.ForeignKey(Пользователь, on_delete=models.SET_NULL, null=True, verbose_name='Принял', Blank=True) date_of_creation = models.DateTimeField(auto_now=True, verbose_name='Дата создания') Execution_date = models.DateField(verbose_name='Даты исполнения') адрес = модели.CharField(max_length=200, verbose_name='Адрес') service = models.CharField(max_length=100, verbose_name='Услуга') master = models.ForeignKey(Пользователь, on_delete=models.SET_NULL, linked_name='master', null=True, verbose_name='Мастер', пусто=True) client = models.ForeignKey(Phone, on_delete=models.SET_NULL, linked_name='client', null=True, verbose_name='Клиент', Blank=True) защита __str__(сам): return '%s %s %s' % (self.execution_date, self.address, self.service) класс Мета: verbose_name = 'Заявка' verbose_name_plural = 'Заявки' forms.py

из форм импорта Django from .models import Заказы, Человек, Телефон из django.contrib.auth.forms импортировать AuthenticationForm из django.contrib.auth.models импортировать пользователя класс UserFullnameChoiceField(forms.ModelChoiceField): # Вывод полного имени и фамилии пользователя def label_from_instance(self, obj): return obj.get_full_name() class OrdersForms(forms.ModelForm): master = UserFullnameChoiceField(queryset=User.objects.all(), label='Мастер') client_name = forms.CharField(label='Фио клиента') phones = forms.CharField(label='Телефон') class Meta: model = Orders fields = ('execution_date', 'address', 'service', 'master', 'client_name', 'phones') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['master'].empty_label = '-Выберите мастера-' for field in self.fields: self.fields[field].widget.attrs['class'] = 'form-control' class PhoneForms(forms.ModelForm): class Meta: model = Phone fields = ('phone', 'contact') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs['class'] = 'form-control' class AuthUserForm(AuthenticationForm, forms.ModelForm): class Meta: model = User fields = ('username', 'password') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs['class'] = 'form-control' class RegisterUserForm(forms.ModelForm): class Meta: model = User fields = ('username', 'password', 'groups') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs['class'] = 'form-control' def save(self, commit=True): user = super().save(commit=False) user.set_password(self.cleaned_data["password"]) if commit: user.save() if hasattr(self, "save_m2m"): self.save_m2m() return user views.py

from .models import Orders, Person, Phone from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView from .forms import OrdersForms, AuthUserForm, RegisterUserForm, PhoneForms from django.urls import reverse, reverse_lazy from django.contrib import messages from django.contrib.auth.views import LoginView, LogoutView from django.contrib.auth.models import User from django.contrib.auth import authenticate, login from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponseRedirect class OrderCreateView(CustomSuccessMessageMixin, CreateView): model = Orders template_name = 'create.html' form_class = OrdersForms success_url = reverse_lazy('data_base') success_msg = 'Заявка дабавлена' def form_valid(self, form): self.object = form.save(commit=False) name = self.request.POST.get('client_name') phone_number = self.request.POST.get('phones') new_person = Person(client_name=name) new_person.save() person_id = new_person.id new_phone = Phone(phone=phone_number, contact_id=person_id) new_phone.save() phone_id = new_phone.id self.object.author = self.request.user self.object.client_id = phone_id self.object.save() # new_person = Person.objects.create(client_name=name) # Phone.objects.create(phone=phone_number, contact_id=person_id) return super().form_valid(form) class OrderUpdateView(LoginRequiredMixin, CustomSuccessMessageMixin, UpdateView): model = Orders template_name = 'edit.html' form_class = OrdersForms second_form_class = PhoneForms success_url = reverse_lazy('edit') success_msg = 'Заявка изменена' def form_valid(self, form): self.object = form.save(commit=False) name = self.request.POST.get('client_name') phone_number = self.request.POST.get('phones') new_person = Person(client_name=name) new_person.save() person_id = new_person.id new_phone = Phone(phone=phone_number, contact_id=person_id) new_phone.save() phone_id = new_phone.id self.object.client_id = phone_id self.object.save() return super().form_valid(form) def get_context_data(self, **kwargs): kwargs['update_true'] = True return super().get_context_data(**kwargs) def get_form_kwargs(self): kwargs = super().get_form_kwargs() group = self.request.user.groups.all() lst_group = [i['name'] for i in group.values()] # if self.request.user != kwargs['instance'].author: if 'Менеджер' not in lst_group: # if str(kwargs['instance'].author.groups.get()) != 'Менеджер': return self.handle_no_permission() return kwargs Simply put, вам нужно добавить что-то в класс OrderUpdateView, чтобы значения из связанных моделей «Человек» и «Телефон» вставлялись в поля «имя_клиента», «телефоны» из класса OrdersForms.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»