Как добавить новую строку в таблицу в Django Python?

В текущей работе пользователь добавляет формы и выбирает статус визита: одобрен и отменен. Например, пользователь выбирает статус визита как одобренный, заполняет остальные поля и сохраняет форму. Новая строка будет добавлена в таблицу ClinicVisitStatusRecord() и ClinicVisitStatusHistory.Затем, когда пользователь редактирует форму и хочет изменить статус визита на отмененный, он не добавляет новую строку в таблицу ClinicVisitStatusRecord() и ClinicVisitStatusHistory, а также не перезаписывает данные. Есть ли способ создать новую строку снова?

serializers.py

class ClinicVisitSerializer(serializers.ModelSerializer):
    clinic_detail = ClinicSerializer(read_only=True, source='clinic')
    staff_relationship_detail = StaffRelationshipSerializer(read_only=True, source='staff_relationship')
    staff_detail = StaffSerializer(read_only=True, source='staff')
    person_visit_name = serializers.CharField(max_length=100, min_length=None, allow_blank=True, help_text='The name of person visiting the clinic')
    bill_amount = serializers.DecimalField(max_digits=None, decimal_places=2, help_text='The clinic visit cost')

    class Meta:
        model = ClinicVisit
        exclude = clinicvisit_exclude
        extra_kwargs = {
            "staff_relationship": {"required": True},
            "visit_type": {"required": True},
            "visit_status": {"required": True},
        }

    def create(self, validated_data):
        obj = ClinicVisit.objects.create(**validated_data)


        if obj.visit_status == "canceled" :
           obj.create_new_clinic_visit_statuses_history(action_by=obj.staff)
           obj.create_visit_status_history(action_by=obj.staff)
           print('OK 1')

        if obj.visit_status == 'approved':
            obj.create_new_clinic_visit_statuses_history(action_by=obj.staff)
            obj.create_visit_status_history(action_by=obj.staff)
            print('OK 2')

models.py

class ClinicVisit(models.Model):
   


    uuid = models.UUIDField(default=uuid.uuid4, editable=False)
    staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
    staff_relationship = models.ForeignKey(
        StaffRelationship,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,)
    clinic = models.ForeignKey(
        Clinic,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,)
    bill_amount = models.IntegerField(default=0)
    general_balance = models.IntegerField(default=0)
    dental_balance = models.IntegerField(default=0)


    date_of_visit = models.DateTimeField('date visit')
    created_at = models.DateTimeField(auto_now_add=True)
    person_visit_name = models.CharField(default="",max_length=200, blank=True, null=True)
    invoice_no = models.CharField(default="",max_length=200, blank=True, null=True)
    visit_type = models.ForeignKey(
        ClinicType,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,)
    remarks = models.TextField(default="", blank=True, null=True)
    visit_status = models.CharField(
        max_length=20,
        choices=CLINIC_VISIT_STATUSES,
        default=CLINIC_VISIT_STATUSES[0][0])

    objects = ClinicVisitManager()

    def create_new_clinic_visit_statuses_history(self, action_by):
        clinic_visit_statuses = ClinicVisitStatusRecord()
        clinic_visit_statuses.clinic_visit = self
        clinic_visit_statuses.action_by = action_by
        clinic_visit_statuses.visit_status = self.visit_status

        clinic_visit_statuses.save()

    def create_visit_status_history(self,action_by):
        clinic_status = ClinicVisitStatusHistory()
        clinic_status.clinic_visit = self
        clinic_status.action_by = action_by
        clinic_status.visit_status = self.visit_status
        clinic_status.created_at = self.created_at
        clinic_status.general_balance = self.general_balance
        clinic_status.dental_balance = self.dental_balance
        clinic_status.bill_amount = self.bill_amount

        clinic_status.save()
Вернуться на верх