Ошибка в методе create метода Writable Nested сериализаторов в django

models.py

class Job(models.Model):
    job_id = models.CharField(max_length=50, default=uuid.uuid4, editable=False, unique=True, primary_key=True)
    org = models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='org_job', null=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='project_job', null=True)
    job_name = models.CharField(max_length=100)
    start_date = models.DateField(null=True,blank=True)
    end_date = models.DateField(null=True,blank=True)
    hours = models.DurationField(null=True,blank=True)
    assignee = models.ForeignKey(User_Master, on_delete=models.CASCADE, related_name='user_master_job', null=True)
    rate_per_hour = models.IntegerField(null=True,blank=True)
    description = models.TextField(max_length=500,null=True,blank=True)
    # attachment_url = models.URLField(upload_to=upload_to , null=True, blank=False)
    remainder = models.BooleanField(null=True,blank=True,default=False)
    billable_status = models.ForeignKey(User_billable_status, on_delete=models.CASCADE, related_name='user_billstatus_job', null=True)
    work_item = ArrayField(models.CharField(max_length=300),null=True,blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.IntegerField(default=0, choices=STATUS_CHOICES)

class User_billable_status(models.Model):
    billable_status_id = models.CharField(max_length=50,default=uuid.uuid4, editable=False, unique=True, primary_key=True)
    org = models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='user_billable_status_org_id', null=True)
    billable_status_name = models.CharField(max_length=20)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

serializers.py

class User_billable_status_Serializers(serializers.ModelSerializer):

    class Meta:
        model = User_billable_status
        fields = ('billable_status_id', 'billable_status_name')


class Jobpost_Serializers(serializers.ModelSerializer):
    billable_status = User_billable_status_Serializers()

    class Meta:
        model = Job
        fields = ('job_id','project','job_name','start_date','end_date','hours','assignee','rate_per_hour','description','remainder','billable_status','work_item')

    def create(self, validated_data):
        job = validated_data.pop('billable_status')
        billable_status = Job.objects.create(**validated_data)
        User_billable_status.objects.create(billable_status=billable_status, **job)
        return billable_status

Я пытался создать данные о состоянии счета при размещении задания, но при попытке я получал ошибку в виде " TypeError at /api/onboarding/job/ User_billable_status() got an unexpected keyword argument 'billable_status' Метод запроса: POST URL запроса: http://127.0.0.1:8000/api/onboarding/job/. Версия Django: 3.2.12 Тип исключения: TypeError Значение исключения:
User_billable_status() получил неожиданный аргумент ключевого слова 'billable_status' Exception Location: C:\Users\gobs4\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\models\base.py, line 503, in >init> Python Executable: C:\Users\gobs4\AppData\Local\Programs\Python\Python310\python.exe Версия Python: 3.10.4 Python Path:
['F:\PM-Onboarding-Service\Onboarding-Service\microservices', 'C:\Users\gobs4\AppData\Local\Programs\Python\Python310\python310.zip', 'C:\Users\gobs4\AppData\Local\Programs\Python\Python310\DLLs', 'C:\Users\gobs4\AppData\Local\Programs\Python\Python310\lib', 'C:\Users\gobs4\AppData\Local\Programs\Python\Python310', 'C:\Users\gobs4\AppData\Local\Programs\Python\Python310\lib\site-packages']. Время сервера: Wed, 18 May 2022 09:03:26 +0530 Возврат трассировки Переход к представлению копирования и вставки C:\Users\gobs4\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py, строка 47, in inner response = await sync_to_async(response_for_exception, thread_sensitive=False)(request, exc) возвращать ответ return inner else: @wraps(get_response) def inner(request): try: response = get_response(request) ... except Exception as exc: response = response_for_exception(request, exc) возвращать ответ return inner "

Я не знаю, почему я получаю эту ошибку, но я потратил почти 2,3 дня, но все еще не могу понять, что не так в моем коде. Пожалуйста, помогите мне исправить эту ошибку.

Я думаю, что в POST API вы загрузили billing_method как список. Но в сериализаторе вы определили его не как список, а как словарь. Поэтому вы должны загрузить billing _method как объект в postman, как показано ниже. следующим образом.

{
    ...
    "client_code": "...",
    "product": "...",        
    "billing_method": {
        "billing_name": "...",
        "description": "...",
        ...
    }
}

Надеюсь, это может помочь.

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