#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