【发布时间】:2020-10-10 14:40:05
【问题描述】:
我正在尝试创建一个投注应用程序,以便用户可以创建投注并挑战其他 .但我无法创建新赌注,因为我将接受赌注的用户放置在同一个模型实例上: 这就是我的模型的样子。
class CreateBet(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL,related_name="bets",null=True, on_delete=models.CASCADE)
bet_name= models.CharField(max_length=255)
amount = models.CharField(max_length=255)
scheduled_datetime = models.DateTimeField(null=True,blank=True)
accepted_user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.SET_NULL,related_name="accept",null=True)
status = models.BooleanField(default=False)
所以我想要的是每当我击球时:
router.register('api/bets',BetViewset,'userbets')
这个终点我希望用户创建一个赌注而不添加到字段 accepted_user 和 status 。但是如果用户点击:
router.register('accept_bet',AcceptBetViewset,'accept')
accepted_user 将被创建,status 将被设置为True。
目前我的序列化器看起来像这样
class BetCreateSerializer(serializers.ModelSerializer):
class Meta :
model = CreateBet
exclude = ['accepted_user','status']
及其api:
class BetViewset(viewsets.ModelViewSet):
permission_classes = [
permissions.IsAuthenticated
]
serializer_class = BetCreateSerializer
def perform_create(self,serializer):
serializer.save(owner = self.request.user)
def get_queryset(self):
today = datetime.date.today()
return CreateBet.objects.filter(scheduled_datetime__date=today)
效果很好。
但每当我尝试使用此序列化程序时:
class AcceptBetSerializer(serializers.ModelSerializer):
bet = BetCreateSerializer(many = True , read_only= True)
class Meta:
model = CreateBet
fields ='__all__'
# def update(self, instance, validated_data):
# id = validated_data.pop('id')
# object = CreateBet.objects.get(id=id)
# object.save(status=True)
并使用此视图集:
class AcceptBetViewset(viewsets.ModelViewSet):
serializer_class = AcceptBetSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self,serializer):
print('hii')
serializer.save(accepted_user = self.request.user,status=True)
def get_queryset(self):
return CreateBet.objects.filter(accepted_user=self.request.user)
没有按我预期的方式工作。每当我尝试接受投注时,它会更新到现有字段,它正在创建一个新的投注对象,其中 owner、bet_name、amount 和 scheduled_date 的字段值为空。我用我有限的知识尝试了一切。有人有什么建议吗?谢谢!
【问题讨论】:
标签: python django django-models serialization django-rest-framework