как исправить «недопустимый аргумент ключевого слова для этой функции» в ModelSerializer

#python #django #django-models #django-rest-framework #django-serializer

#python #django #django-модели #django-rest-framework #django-сериализатор

Вопрос:

Я работаю над ModelSerializers их полем, не относящимся uploaded_files = serializers.FileField(required=True, source='files') к модели BlogSerializer . uploaded_files Не принадлежит BlogModel .

Когда я пытаюсь загрузить, это дает мне 'files' is an invalid keyword argument for this function , что я знаю files , что это не поле, BlogModel но я попытался добавить метод свойства files(self): BlogModel , который тоже не работал.

models.py

 class BlogModel(models.Model):

    BLOG_STATUS = (
        ('PUBLISH', 'Publish'),
        ('DRAFT', 'Draft'),
    )

    blog_id = models.AutoField(primary_key=True)
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='blogs')
    title = models.CharField(max_length=255)
    content = models.TextField(blank=True, null=True)
    status = models.CharField(max_length=7, choices=BLOG_STATUS)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta():
        db_table = 'blogs'
        verbose_name = 'Blog'
        verbose_name_plural = 'Blogs'

    def __str__(self):
        return self.title

    @property
    def files(self): #here is the property i added
        return 'do something'

  

serializers.py

 
class BlogFilesSerializer(ModelSerializer):
    created_at = serializers.SerializerMethodField()
    updated_at = serializers.SerializerMethodField()

    class Meta:
        model = BlogFilesModel
        fields = ('blog_files_id', 'blog', 'path',
                  'created_at', 'updated_at')
        extra_kwargs = {
            'path': {
                'error_messages': {
                    'blank': 'File is required'
                },
            }
        }


class BlogSerializer(ModelSerializer):
    blog_files = serializers.SerializerMethodField()
    uploaded_files = serializers.FileField(required=True, source='files')
    blog_created_at = serializers.SerializerMethodField(read_only=False)

    class Meta:
        model = BlogModel
        fields = ('blog_id', 'user', 'title', 'content',
                  'status','blog_files', 'blog_created_at',
                  'uploaded_files',
                  )


  

трассировка ошибок

Надеюсь, вы хорошо объяснили мою проблему.

Спасибо.

Комментарии:

1. Что должно произойти с этими «файлами», поскольку у вас нет какого-либо файлового поля?

2. @IvanStarostin после того, как я создам новый объект блога, я сохраню файлы BlogFIlesModel в blog качестве ссылки на внешний ключ

3. Найдите «DRF вложенный сериализатор с возможностью записи».

4. @IvanStarostin спасибо, сэр, изменение поля сериализатора uploaded_files = serializers.FileField(write_only=True) решило эту проблему. Но как я могу загрузить несколько файлов в uploaded_files