【发布时间】:2022-11-20 05:44:02
【问题描述】:
我有两个模型。一个是文章,另一个是文档模型。文档模型包含用于上传文档的文件字段以及上传文档的一些其他元数据。文章有一个与文档模型相关的 m2m 字段。文章模型有一个字段用户,根据发布的是哪篇文章。
我想使用 m2m 字段上传文件,但它给出了两个错误:
“文件”:[ “类型不正确。预期的 pk 值,已收到 InMemoryUploadedFile。”]
我也试过使用 slug 字段,文档不存在。但我正在上传新文件,为什么说文件不存在。
请指导我如何实现这一目标?
文章模型
class Article(models.Model):
id=models.AutoField(primary_key=True, auto_created=True, verbose_name="ARTICLE_ID")
headline=models.CharField(max_length=250)
abstract=models.TextField(max_length=1500, blank=True)
content=models.TextField(max_length=10000, blank=True)
files=models.ManyToManyField('DocumentModel', related_name='file_documents',related_query_name='select_files', blank=True)
published=models.DateTimeField(auto_now_add=True)
tags=models.ManyToManyField('Tags', related_name='tags', blank=True)
isDraft=models.BooleanField(blank=True, default=False)
isFavourite=models.ManyToManyField(User, related_name="favourite", blank=True)
created_by=models.ForeignKey(User, on_delete=mode
文档模型
class DocumentModel(models.Model):
id=models.AutoField(primary_key=True, auto_created=True, verbose_name="DOCUMENT_ID")
document=models.FileField(max_length=350, validators=[FileExtensionValidator(extensions)], upload_to=uploaded_files)
filename=models.CharField(max_length=100, blank=True)
filesize=models.IntegerField(default=0, blank=True)
mimetype=models.CharField(max_length=100, blank=True)
created_at=models.DateField(auto_now_add=True)
文章序列化器
class ArticleSerializer(serializers.ModelSerializer):
#serializer for getting username of User
created_by=serializers.CharField(source='created_by.username', read_only=True)
isFavourite=serializers.PrimaryKeyRelatedField(many=True, read_only=True)
tags=serializers.SlugRelatedField(many=True, queryset=Tags.objects.all(), slug_field="tag")
readtime=serializers.IntegerField(read_only=True)
class Meta:
model= Article
fields = ["id" , "headline", "abstract", "content", "readtime", "get_published_timestamp", "isDraft", "isFavourite", "tags", 'files', 'created_by' ]
文档序列化程序
class DocumentSerializer(serializers.ModelSerializer):
filesize=serializers.ReadOnlyField(source='sizeoffile')
class Meta:
model=DocumentModel
fields = ['id', 'document', 'filesize', 'filename', 'mimetype', 'created_at' ]
【问题讨论】:
标签: python django django-models django-rest-framework django-serializer