[英]Update related model field through a view (Django REST)
class Question(models.Model):
...
posted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
# following fields are for sorting by popularity
popular_param = models.BigIntegerField(default=0)
class Answer(models.Model):
question = models.ForeignKey(Question, related_name='answers', on_delete=models.CASCADE)
...
posted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
我想要實現的目標:每當創建一個答案時,問題model的 Popular_param 應該增加 10。
我通過覆蓋視圖集中的perform_create嘗試了以下操作。
class PostAnswerViewSet(viewsets.ModelViewSet):
"""
this is where you post answers
"""
queryset = Answer.objects.all()
serializer_class = PostAnswerSerializer
def perform_create(self, serializer):
answer = self.get_object()
answer.question.popular_param = F('popular_param') + 10
answer.question.save()
serializer.save()
或者
def perform_create(self, serializer):
Answer.question.popular_param = F('popular_param') + 10
Answer.question.save()
serializer.save()
我似乎遺漏了一些語法,但不知道是什么。 到目前為止,關於 SO 的其他問題都沒有幫助。
你可以試試這個:
class PostAnswerViewSet(viewsets.ModelViewSet):
"""
this is where you post answers
"""
queryset = Answer.objects.all()
serializer_class = PostAnswerSerializer
def perform_create(self, serializer):
answer = serializer.save()
answer.question.popular_param = F('popular_param') + 10
answer.question.save()
因為在調用serializer.save()
時將創建Answer
object 。 在此之前,我認為我們不能get_object()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.