【发布时间】:2021-06-10 13:15:36
【问题描述】:
models.py
class tournament(models.Model):
tournament_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=60)
organizer = models.ForeignKey(
client, null=False, blank=False, on_delete=models.CASCADE)
logo = models.ImageField(null=True, blank=False)
game = models.CharField(max_length=20, choices=GAMES)
fees = models.IntegerField()
def __str__(self):
return self.title
views.py
# tournament
@api_view(['GET'])
def tournamentList(request):
tournaments = tournament.objects.all()
serializer = tournamentSerializer(tournaments, many=True)
return Response(serializer.data)
@api_view(['GET'])
def tournamentDetail(request, tournamentId):
singleTournament = tournament.objects.get(tournament_id=tournamentId)
serializer = tournamentSerializer(singleTournament, many=False)
return Response(serializer.data)
@api_view(['POST'])
def tournamentCreate(request):
serializer = tournamentSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
@api_view(['POST'])
def tournamentUpdate(request, tournamentId):
singleTournament = tournament.objects.get(tournament_id=tournamentId)
serializer = tournamentSerializer(
instance=singleTournament, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
@api_view(['DELETE'])
def tournamentDelete(request, tournamentId):
singleTournament = tournament.objects.get(tournament_id=tournamentId)
singleTournament.delete()
return Response("Deleted Item")
serializers.py
class tournamentSerializer(serializers.ModelSerializer):
organizer = clientSerializer(many=False, read_only=False)
class Meta:
model = tournament
fields = "__all__"
def create(self, validated_data):
organizer_data = validated_data.pop('organizer')
new_tournament = tournament.objects.create(**validated_data)
client.objects.create(organizer_data)
return new_tournament
我在锦标赛序列化程序中创建了 cusotm 创建字段 来创建 和更新 嵌套字段, 尝试使该工作很长时间,但无法摆脱错误。
当我尝试在 比赛更新 上发布数据时,错误提示为
NOT NULL constraint failed: api_tournament.organizer_id
这里 api 是应用程序的名称。
欢迎任何解决此问题的建议和代码重构以实现最佳实践
【问题讨论】:
-
请编辑您的问题以使其更加关注。删除所有不必要的代码。如果您只对
tournamentUpdate调用引发的错误感兴趣,我们为什么要阅读所有其他 api 视图代码? -
感谢您的建议,我删除了不必要的代码。
标签: django django-models serialization django-rest-framework django-views