晕,我正在使用外键创建多个数据库表,但我遇到了一些错误,希望有人能帮忙,下面是我的代码和错误消息
###models.py 文件
class SchoolVideo(models.Model):
school = models.ForeignKey(
Profile, on_delete=models.CASCADE, related_name='school_video')
intro_video = models.FileField(
upload_to='assets/videos', blank=True, null=True)
###序列化文件
class VideoSerializer(serializers.ModelSerializer):
class Meta:
model = SchoolVideo
fields = ('intro_video',)
def create(self, validated_data, *args, **kwargs):
if 'user' in validated_data:
user = validated_data.pop('user')
else:
user = Profile.objects.create(**validated_data)
school_video = SchoolVideo.objects.update_or_create(
user=user, defaults=validated_data
)
return school_video
###API 视图
class SchoolVideoAPi(generics.CreateAPIView):
serializer_class = VideoSerializer
queryset = SchoolVideo.objects.all()
permission_class = [permissions.IsAuthenticated]
parser_classes = (MultiPartParser, FormParser)
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(
data=request.data, instance=request.user.profile.school_video
)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(
serializer.data,
message='Video successfully Uploaded',
status=status.HTTPS_201_CREATED,
headers=headers,
)
def perform_create(self, serializer):
print(self.request.user.profile)
serializer.save(user=self.request.user.profile)
这是我收到的回溯/错误消息 ##err 回溯
response = handler(request, *args, **kwargs)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/rest_framework/generics.py", line 190, in post
return self.create(request, *args, **kwargs)
File "/home/olaneat/Desktop/files/project/django/schMrk/sch-market/schoolDetail/apiviews.py", line 117, in create
self.perform_create(serializer)
File "/home/olaneat/Desktop/files/project/django/schMrk/sch-market/schoolDetail/apiviews.py", line 128, in perform_create
serializer.save(user=self.request.user.profile)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/rest_framework/serializers.py", line 205, in save
self.instance = self.create(validated_data)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/rest_framework/serializers.py", line 939, in create
instance = ModelClass._default_manager.create(**validated_data)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/django/db/models/query.py", line 445, in create
obj = self.model(**kwargs)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/django/db/models/base.py", line 483, in __init__
_setattr(self, field.name, rel_obj)
File "/home/olaneat/Desktop/files/project/django/schMrk/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 215, in __set__
raise ValueError(
ValueError: Cannot assign "<CustomUser: abc@xyz.com>": "SchoolVideo.school" must be a "Profile" instance.
谁能帮帮忙
答案 0 :(得分:0)
错误是由这一行引起的:
instance=request.user.profile.school_video
正如错误所说,您将 school_video
作为实例传递,但它失败了,因为它是 RelatedManager
。只需过滤出您需要解决此问题的 school_video
。
例如:
instance=request.user.profile.school_video.first()
或
instance=request.user.profile.school_video.filter(<your filters).first()
只需确保您的查询集仅返回一个对象。
同样,下次请尽量避免为代码和错误添加图像,而将它们作为文本放在问题中。