Ошибка в методе 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": "...",
...
}
}
Надеюсь, это может помочь.