django - DRF 序列化程序更新说反向外键字段为空,即使它有数据
问题描述
我正在尝试更新模型,但序列化程序说我的反向外键字段为空,即使它有数据(并且在我运行 get 请求时它返回数据)。
楷模:
匹配团队模型
class MatchTeam(models.Model):
captain = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='match_teams_captained'
)
teammates = models.ManyToManyField(
User,
blank=True,
related_name='match_teammates'
)
match = models.ForeignKey(
MatchModel,
on_delete=models.CASCADE,
related_name='teams'
)
匹配模型
class MatchModel(models.Model):
TYPES = (
(1, "Ex1"),
(2, "Ex2"),
(3, "Ex3"),
(4, "Ex4"),
)
is_available = models.BooleanField()
is_started = models.BooleanField()
is_finished = models.BooleanField()
is_deleted = models.BooleanField()
type = models.IntegerField(choices=TYPES)
team_size = models. PositiveSmallIntegerField()
num_teams = models. PositiveSmallIntegerField()
created_at = models.DateTimeField(editable=False)
# Foreign Keys
host = models.ForeignKey(
User,
related_name='matches_hosted',
on_delete=models.CASCADE,
)
winning_team = models.OneToOneField(
'MatchTeam',
on_delete=models.CASCADE,
null=True,
blank=True,
related_name='+'
)
def save(self, *args, **kwargs):
if not self.id:
self.created_at = timezone.now()
return super(MatchModel, self).save(*args, **kwargs)
我正在尝试在我的序列化程序中更新 MatchTeam 模型,但是当我通过 pk 获取我的 MatchModel 时,它说“teams”为空,即使在我检查数据库或运行获取请求时它有数据。
视图.py
def put(self, request, pk, format=None):
match = self.get_object(pk)
serializer = MatchModelSerializer(match, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
print(serializer.errors)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_object(self, pk):
try:
return MatchModel.objects.get(pk=pk)
except MatchModel.DoesNotExist:
raise Http404
序列化器:
class MatchModelSerializer(serializers.ModelSerializer):
type = ChoicesField(choices=MatchModel.TYPES)
host = UserModelSerializer(many=False)
teams = MatchTeamSerializer(many=True)
class Meta:
model = MatchModel
fields = (
'id',
'is_available',
'is_started',
'is_finished',
'is_deleted',
'type',
'team_size',
'num_teams',
'host',
'teams',
'result_votes',
'created_at'
)
解决方案
推荐阅读
- php - 在 bash 脚本中创建命令以运行 php 脚本
- hadoop - 每次我想运行作业时都需要将 JAR 上传到 hadoop 吗?
- java - Maven编译错误:包org.junit不存在
- asp.net-core - 如何在 asp.net 核心项目中使用图像流
- html - XPath 选择包含® 符号的文本?
- sql - 将列值拆分为动态列
- python - 为什么使用 pandas apply() 不能正确解释日期时间格式?
- laravel - 无法停用电子邮件验证 Laravel
- eclipse - Eclipse 验证忽略模式
- excel - 如果我只知道部分文件名,如何查找文件并打开文件