2017-04-21 14 views
0

I followed suggestion from this question でDjangoのモデルのフィールド名の値を変更することが、私は別のオブジェクトの提出日にquery_setの一つのフィールドに名前を付ける必要があるDRF外部キー

私のモデルは

class Choice(models.Model): 
    question = models.ForeignKey(Question, related_name='choice', on_delete=models.CASCADE) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

    def __str__(self): 
     return self.choice_text 


class ChoiceWithTime(models.Model): 
    choiceTime = models.ForeignKey(Choice,related_name='choiceTime', on_delete=models.CASCADE) 
    choice_date=models.DateField() 

マイビュー

です
class QuestionChoicesViewSet(viewsets.ModelViewSet): 
    queryset = Choice.objects.all() 
    serializer_class = ChoiceDateSerializer 

    def get_queryset(self): 
     return Choice.objects.values('choiceTime__choice_date','choice_text').annotate(
      total_votes=Count('choiceTime__choice_date'), 
     ) 

投稿日時をカウントする必要があります。

私は、シリアライザは、クエリのフィールドを認識していることをchoiceTime__choice_dateに名前を付ける方法がわからない

class ChoiceDateSerializer(serializers.ModelSerializer): 
    choiceTime__choice_date = serializers.DateTimeField() 
    total_votes = serializers.IntegerField() 

    class Meta: 
     model = Choice 
     fields = ('id', 'choice_text','total_votes','choiceTime__choice_date') 

を設定し、私は

{ 
    "choice_text": "ant tower", 
    "total_votes": 3, 
    "choiceTime__choice_date": "2017-04-20" 
} 

を受け取るしかし、私は

{ 
    "choice_text": "ant tower", 
    "total_votes": 3, 
    "choice_date": "2017-04-20" 
} 

が異なるみました受け取るしたいですオプションは成功しません。間違いなく私はポイントを逃しています。 私の目的のために働いていますが、私はよく書かれたAPIを持っていたいと思います。

2オプション変更時刻提出モデル?

class ChoiceWithTime(models.Model): 
    choiceTime = models.ForeignKey(Choice,related_name='choiceTime', on_delete=models.CASCADE) 
    choice_date=models.DateField() 
    coutner = models.IntegerField(default=0) 

Is 2オプションは、私の特定の問題のより良いアプローチと考えていますか?ありがとう!

+0

モデルパッケージ機能を使用してシリアライザ変化値に渡す前に示唆されました。 –

答えて

0
from django.db.models import Count,F 

誰かがこの問題を発見した場合、これが最も簡単な答えです。そのよう 、私は今後の参考のために、とにかく関連分野をシリアル化する方法上の任意の助けをいただければ幸いです

class QuestionChoicesViewSet(viewsets.ModelViewSet): 
    queryset = Choice.objects.all() 
    serializer_class = ChoiceDateSerializer 
    def get_queryset(self): 
     return Choice.objects.all().annotate(choice_date=F('choiceTime__choice_date')).values('choice_date','choice_text').annotate(
      total_votes=Count('choiceTime__choice_date'), 
     ) 
1

jsonオブジェクトを受け取りました。そのオブジェクトにキー値を追加しています。

for vote_detail in data: 
    if vote_detail.choiceTime__choice_date: 
     vote_detail.choice_date=vote_detail.choiceTime__choice_date 

シンプルなソリューションをシリアライズして保存します。

モデルに呼び出す名前を追加することもできます。それはバックエンドに近く、掘り下げる価値があるかもしれません。