Я использую Django Rest Framework для создания APIRest, но я получил эту ошибку, когда пытался сделать простое предложение для ресурса со скидкой
Это моя модель
class Discount(BaseModel):
""" Discount Model. """
code = models.CharField(max_length=50)
rate = models.DecimalField( max_digits=3, decimal_places=2)
class DiscountStatus(models.TextChoices):
ENABLED = 'ENABLED'
DISABLED = 'DISABLED'
REDEEMED = 'REDEEMED'
status = models.CharField("status", choices=DiscountStatus.choices, default=DiscountStatus.ENABLED, max_length=10)
insurance_company = models.ForeignKey("sanitas.InsuranceCompany", on_delete=models.CASCADE)
appointment = models.ForeignKey("sanitas.Appointment", verbose_name="appointment", on_delete=models.CASCADE, blank=True, null=True)
class Meta():
""" Meta class. """
db_table = 'discounts'
Это мой сериализатор
class DiscountModelSerializer(serializers.ModelSerializer):
""" Insurance company model serializer. """
insurance_company = InsuranceCompanyModelSerializer(many=False, read_only=True, allow_null=True, required=False)
insurance_company_id = serializers.IntegerField(allow_null=True, required=False,)
appointment = AppointmentModelSerializer(many=False, read_only=True, allow_null=True, required=False)
appointment_id = serializers.IntegerField(allow_null=True, required=False)
class Meta():
""" Meta class. """
model = Discount
fields = (
'id',
'code',
'rate',
'status',
'appointment'
'insurance_company'
'insurance_company_id'
'appointment_id'
)
А это мой Viewset
class DiscountViewset(viewsets.ModelViewSet):
""" Schedule items will be the time unit to manage appointments. """
queryset = Discount.objects.all()
serializer_class = DiscountModelSerializer
@action(methods=['post'], detail=False)
def generate(self, request):
""" Create dicounts in bulk. """
rate = 1 - request.data['rate'] / 100
insurance_company = get_object_or_404(InsuranceCompany, pk=request.data['insurance_company_id'])
count = 0
amount = request.data['amount']
response = []
while count < amount:
code = insurance_company.code + randomString(8)
discount = Discount()
discount.rate = rate
discount.code = code
discount.insurance_company = insurance_company
discount.save()
serializer = DiscountModelSerializer(discount)
response.append(serializer.data)
count = count + 1
return Response(response, status=status.HTTP_200_OK)
Я предполагаю, что ошибка появляется, потому что у меня есть необязательное поле (на самом деле не является обязательным, но когда я создаю Коды скидок еще не назначены, поэтому они будут добавлены позже), и появляется ошибка, потому что я не добавил поле «Назначение» и при попытке получить ресурсы, которые я делаю, Эта ошибка показывает
AssertionError at /discounts/generate/ The field 'appointment_id' was declared on serializer DiscountModelSerializer, but has not been included in the 'fields' option.