Как я могу хранить данные о регистрации в моей базе данных django?

Я хочу сохранить данные пациента со страницы регистрации в мою базу данных django, используя сериализаторы, но я не уверен, как это сделать!!!

Здесь я прилагаю views.py файл:

from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import render,redirect
from django.contrib import messages
from django.contrib.auth import authenticate,login,logout
from rest_framework import viewsets

from .models import *
from .serializers import PatientSerializer


class PatientView(viewsets.ModelViewSet):
    queryset = patient.objects.all()
    serializer_class = PatientSerializer

def login_user(request):
    if request.method == 'POST':
        username = request.POST['Username']
        password = request.POST['Password']
        user_type = request.POST['user_type']

        user = authenticate(username=username, password=password)

        #doctor is superuser and receptionist is normaluser

        if user is None:
            login(request, user)
            if user_type == 'Doctor':
                return render(request,'')
            elif user_type == 'Receptionist':
                return render(request, 'Auth/registration.html')
            else:
                return render(request,'')
        else:
            messages.error(request, "Bad Credentials")
            return redirect('login')

    return render(request, "Auth/login.html")

def registration(request):
    if request.method == "POST":
        username = request.POST['username']
        PID = request.POST['PID']
        Name = request.POST['Name']
        Age = request.POST['Age']
        DOB = request.POST['DOB']
        gender = request.POST['gender']
        BG = request.POST['BG']
        PN = request.POST['PN']
        Add = request.POST['Add']


    else:
        if request.user.is_staff:
            return render(request,'Auth/registration.html')
        else:
            return HttpResponseForbidden('<h1> 403 Forbidden <br>You are not allowed to access this page.</h1>')

Это мой registration.html файл :

Это мой models.py файл:

from django.db import models
from django import forms

User_type = (
    ("Doctor", "Doctor"),
    ("Receptionist", "Receptionist"),
    ("View Patient","View Patient"),
)

Gender = (
    ("Male", "Male"),
    ("Female", "Female"),
    ("Other","Other"),
)

Blood_group = (
    ("A+","A+"),
    ("A-","A-"),
    ("B+","B+"),
    ("B-","B-"),
    ("AB+","AB+"),
    ("AB-","AB-"),
    ("O+","O+"),
    ("O-","O-"),
)

class Doctor(models.Model):
    Username = models.CharField(max_length=200)
    Password = models.CharField(max_length=32)
    type = models.CharField(max_length=10,default='doctor')

    def __str__(self):
        return self.Username

    def is_doctor(self):
        return self.type

class receptionist(models.Model):
    Username = models.CharField(max_length=200)
    Password = models.CharField(max_length=32)
    type = models.CharField(max_length=10,default='Receptionist')


    def __str__(self):
        return self.Username

    def is_receptionist(self):
        return self.type

class patient(models.Model):
    Patient_ID = models.CharField(max_length=200)
    Name = models.CharField(max_length=200)
    Age = models.CharField(max_length=200)
    DOB = models.DateTimeField()
    Gender = models.CharField(max_length=200 ,choices=Gender)
    BloodGroup = models.CharField(max_length=200 ,choices=Blood_group)
    Phone = models.CharField(max_length=200)
    Address = models.CharField(max_length=200)

и это serializers.py файл:

from rest_framework import serializers
from .models import *

class PatientSerializer(serializers.ModelSerializer):
    class Meta:
        model = patient
        fields = ("PID", 'Name', 'Age', 'DOB', 'gender', 'bg', 'pn', 'Add' )

Я не уверен, что сериализатор нужен или нет, но один из моих друзей сказал, что вы можете использовать сериализаторы для этого, поэтому я использовал его, если он не нужен, то подскажите мне другой способ!!!

И вообще, я работаю над этим проектом, поэтому некоторые вещи могут быть не сделаны, так что не обращайте внимания на эти вещи, я просто хочу сохранить информацию о пациенте в моей базе данных. Так что, пожалуйста, помогите мне найти решение. Спасибо!!!

Чтобы сохранить новую запись объекта в вашей базе данных, сделайте это следующим образом, в вашей registration функции в файле views.py:

from . import patient

new_patient = patient(Name=Name, Age=Age, gender=Gender) #include all properties here
new_patient.save()

В директории, где живут ваши models.py и views.py создайте файл, если он еще не существует forms.py и добавьте следующий код.

В файле forms.py

from . import models
from django import forms
from .models import patient

# Create your forms here
class PatientForm(forms.Form):
    class Meta:
        model = patient
        # If you want all fields of your model then un-comment the below
        # and comment the next line
        # fields = '__all__'
        fields = ("PID", "Name", "Age", "DOB", "gender", "bg", "pn", "Add")

В views.py

from .forms import PatientForm


def registration(request):
    form = PatientForm()
    # When method is post
    if request.method == "POST":
        # Populate form with data posted
        form = PatientForm(request.POST)
        # Checking form validity
        if form.is_valid():
            # Save data to the db
            form.save()
            return  # do something
        # When form is not valid
        else:
            # Re-render the page with existing data
            return render(request, "Auth/registration.html", {"form": form})
    # When method is not post
    else:
        if request.user.is_staff:
            return render(request, "Auth/registration.html", {"form": form})
        else:
            return HttpResponseForbidden("<h1> 403 Forbidden <br>You are not allowed to access this page.</h1>")

В файле registration.html

<form>
    {% csrf_token %}
    <!-- Any other thing you want -->
    {{ form }}
    <!-- Any other thing you want -->
</form>

Сериализаторы позволяют преобразовывать наборы запросов или экземпляры моделей в собственные типы данных Python, которые затем могут быть легко преобразованы в JSON, XML или другие типы контента. Если вы просто хотите получать информацию о пациентах в базу данных, то нет необходимости возиться со сложностями JSON или XML. Вы можете просто использовать django forms и сохранять данные. Просто создайте файл forms.py и введите в него:

from django import forms
from .models import Patient


class PatientForm(forms.ModelForm):
    class Meta:
    .....

А затем перейдите к созданию полной формы точно так же, как вы создавали модель, т.е. используя классы. После создания формы вы можете отредактировать ее мета-свойства, чтобы при необходимости придать ей стиль, или просто придать стиль при определении полей. Затем вы можете отобразить форму на веб-странице, передав ее в качестве контекстной переменной в представлении веб-страницы, то есть в файле views.py. Затем в HTML веб-страницы вы передаете форму как тег, возможно, что-то вроде {{form.as_p}}. Это должно работать просто замечательно. Однако, если вы действительно хотите использовать сериализаторы для выполнения этой задачи, вы можете использовать javascript на веб-странице для отправки JSON обратно на сервер и затем сохранить его таким образом. Хотя, это кажется излишне сложным и не является способом Django. PS: from .models import * - это ужасный способ импорта моделей. Пожалуйста, будьте конкретны при импорте модулей/классов в Python.

Вернуться на верх