Как сохранить данные из таблицы html в django без использования form.py. В настоящее время я создаю таблицу в html с помощью кнопки добавления, и после добавления всех строк в таблицу я хочу сохранить ее, но я не использую form.py только view.py, html, model.py мой код просмотра ниже просмотры.py
school_name = request.POST['school_name']
m_pass_out = request.POST['m_pass_out']
medicalschool = MedicalSchool(school_name=school_name, m_pass_out=m_pass_out)
medicalschool.save()
Код моей модели ниже модели.py
class DoctorProfile(models.Model):
user_guid = models.OneToOneField(
'EgdEradUsers', models.DO_NOTHING, db_column='user_guid', primary_key=True)
doctor_guid = models.UUIDField(unique=True)
featured_doctor_id = models.BooleanField()
primary_speciality = models.ForeignKey(DSpecialtyType, models.DO_NOTHING)
# This field type is a guess.
secondary_speciality = models.TextField(blank=True, null=True)
years_experience = models.IntegerField()
# This field type is a guess.
education = models.TextField(blank=True, null=True)
license_number = models.CharField(max_length=1000, blank=True, null=True)
npi_number = models.CharField(max_length=1000, blank=True, null=True)
revalidation_cme = models.IntegerField(blank=True, null=True)
# This field type is a guess.
states_to_practice = models.TextField(blank=True, null=True)
# This field type is a guess.
board_certification = models.TextField(blank=True, null=True)
# This field type is a guess.
honors_awards_recognition = models.TextField(blank=True, null=True)
# This field type is a guess.
publications = models.TextField(blank=True, null=True)
description = models.CharField(max_length=1000, blank=True, null=True)
# This field type is a guess.
hospital_privileges = models.TextField(blank=True, null=True)
phone_code = models.IntegerField(blank=True, null=True)
primary_contact_number = models.CharField(max_length=45)
phone_code2 = models.IntegerField(blank=True, null=True)
secondary_contact_number = models.CharField(
max_length=45, blank=True, null=True)
resume_url = models.CharField(max_length=1000, blank=True, null=True)
avatar_url = models.CharField(max_length=1000, blank=True, null=True)
additional_comments = models.CharField(
max_length=1000, blank=True, null=True)
class Meta:
managed = True
db_table = 'doctor_profile'
class MedicalSchool(models.Model):
school_name = models.CharField(max_length=100)
m_pass_out = models.DateField(max_length=100)
doctor_profile = models.ForeignKey(DoctorProfile, on_delete=models.CASCADE)
created_at = models.DateTimeField()
updated_at = models.DateTimeField(blank=True, null=True)
class Meta:
db_table = 'medical_school'
Мой html-код ниже HTML
<div class = "container-lg">
<div class = "table-responsive">
<div class = "table-wrapper">
<div class = "table-title">
<div class = "row">
<div class = "col-sm-8">
<h2>Medical School</h2>
</div>
<div class = "col-sm-4">
<button type = "button" id = "medical" class = "btn btn-info add-
new"><i class = "fa fa-plus"></i> Add New</button>
</div>
</div>
</div>
<table id = "medicaltable" class = "table table-bordered">
<thead>
<tr>
<th>Name of School</th>
<th>Year of Graduation</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td id = "medicaltext" name = "school_name"></td>
<td id = "medicaldate" name = "m_pass_out"></td>
<td>
<a id = "medicaladd" class = "add" title = "Add" data-
toggle = "tooltip"><i class = "material-icons"></i></a>
<a id = "medicaledit" class = "edit" title = "Edit" data-
toggle = "tooltip"><i class = "material-icons"></i></a>
<a id = "medicaldelete" class = "delete" title = "Delete" data-
toggle = "tooltip"><i class = "material-icons"></i></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
Я не использовал форму для остальной части своего приложения; вот почему я стараюсь избегать формы
Но это не звучит как хороший аргумент. Представьте, что вам нужен первичный ключ школы, но почему-то некоторые школы не разрешены, с формой Django, которую легко проверить (на самом деле вам не нужно писать эту логику, это просто изменение queryset=.... Делая это вручную, у вас в конечном итоге будет большая кодовая база, и если вы позже передумаете, потребуется много усилий, чтобы изменить эту кодовую базу.
Могу ли я использовать форму только здесь, чтобы мне не нужно было переписывать весь код только для одной таблицы??
Поделитесь моделью DoctorProfile тоже
Только что добавил модель профиля доктора
Я просто хочу, чтобы имя вашего профиля врача отображалось в формате html. я думаю, вы можете сделать это сами. я прокомментировал, где вы должны изменить
Вы можете получить доступ к каждому вводу html-формы по их имени в поле зрения. см. ниже код:
Модели
from django.db import models
from django import forms
class MedicalSchool(models.Model):
school_name = models.CharField(max_length=100)
m_pass_out = models.DateField(max_length=100)
doctor_profile = models.ForeignKey(DoctorProfile, on_delete=models.CASCADE)
created_at = models.DateTimeField()
updated_at = models.DateTimeField(blank=True, null=True)
class Meta:
db_table = 'medical_school'
class MedicalSchoolForm(forms.ModelForm):
class Meta:
model = MedicalSchool
fields = ['school_name', 'm_pass_out', 'doctor_profile']
Просмотры
from django.contrib import messages
from django.shortcuts import redirect, render
from . import models
def MedicalSchool(request):
url = request.META.get('HTTP_REFERER') # get last url
if request.method == 'POST':
form = models.MedicalSchoolForm(request.POST) # access to ModelForm
if form.is_valid():
data = models.MedicalSchool() # create a instance of your Model
data.school_name = form.cleaned_data['school_name'] # 'school_name' is the name that we specified in html form input
data.m_pass_out = form.cleaned_data['m_pass_out'] # 'm_pass_out' is the name that we specified in html form input
data.doctor_profile_id = form.cleaned_data['doctor_profile'] # 'doctor_profile' is the name that we specified in html form input
data.save()
return redirect(url)
else:
messages.warning(request, form.errors)
return redirect(url)
context = {'DoctorProfile': models.DoctorProfile.objects.all()}
return render(request, 'MedicalSchool.html', context)
URL-адреса
from django.urls import path
from . import views
app_name = 'School'
urlpatterns = [
path('', views.MedicalSchool, name='MedicalSchool'),
...
]
Медицинская школа.html
<form action = "{% url 'School:MedicalSchool' %}" method = "POST">
{% csrf_token %}
<input type = "text" name = "school_name" placeholder = "school name" required>
<input type = "text" name = "m_pass_out" placeholder = "m pass out" required>
<select name='doctor_profile'>
{% for dr in DoctorProfile %}
<option name = "doctor_profile" value = "{{ dr.id }}">{{ dr.title}}</option> <!-- Match your code with {{ dr.title}} -->
{% endfor %}
</select>
<button type = "submit"> Submit </button>
</form>
дайте мне знать, если возникла проблема
В школе будет несколько школ, поэтому мне нужно сохранить несколько строк
О какой модели вы говорите?
Один врач мог учиться в нескольких медицинских школах, поэтому мне нужно сохранить информацию об 1 или нескольких медицинских школах от этого конкретного врача.
В модели MedicalSchool поле doctor_profile имеет внешний ключ к модели DoctorProfile. поэтому форму MedicalSchool можно просто сохранить для конкретной модели DoctorProfile. этот вопрос относится к форме MedicalSchool, а не к форме DoctorProfile. истинный?
Если этот вопрос ответил, и у вас есть другой вопрос. вы можете открыть другой вопрос и закрыть этот
Правильный этот вопрос для медицинской школы, и я подумал, могу ли я добавить данные из таблицы в модель, не используя форму
Если вы хотите, чтобы ваши данные были предоставлены пользователем, вы должны использовать форму
Нет смысла не использовать форму. Вам не нужно отображать HTML-форму для работы с формой Django. Идея формы Django заключается в проверке и очистке данных и удалении большого количества шаблонной логики.