Как добавить новую строку в таблицу в 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()