簡體   English   中英

通過視圖更新相關的 model 字段(Django REST)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM