djangoとdjango restフレームワークを使用して音楽webappを作成しようとしています。問題はlistenレコードカウンターの実装にあります。そのsong_idでは、user_idが増加するはずです。私のモデルは、このようになりますDjangoスーパーキーが存在しない場合は行を作成し、それ以外の場合は
、
class Listen_Record(models.Model):
number=None
listen_count = models.IntegerField(default=1,null=True)
user = models.ForeignKey(User)
songid = models.ForeignKey(Song)
私の見解、
class ListenRecordCreateAPIView(GenericAPIView,CreateModelMixin,UpdateModelMixin):
queryset = Listen_Record.objects.all()
serializer_class = ListenRecordListSerializer
def put(self,request,*args,**kwargs):
if Listen_Record.objects.filter(user=request.data['user'], songid=request.data['songid']).exists():
tableid = Listen_Record.objects.values_list('id', flat=True).filter(user=request.data['user'],
songid=request.data['songid']).get()
cnt = None
try:
cnt = Listen_Record.objects.get(id=tableid)
print(cnt)
except AttributeError:
cnt.listen_count = 0
cnt.listen_count += 1
print(cnt.listen_count)
cnt.save(['listen_count'])
return self.update(cnt,*args,**kwargs)
def post(self, request, *args, **kwargs):
if Listen_Record.objects.filter(user=request.data['user'], songid=request.data['songid']).exists():
self.put(request, *args, **kwargs)
else:
return self.create(request,*args,**kwargs)
基本的には、デフォルトのメソッドはPOSTになるだろうが、存在し、ユーザーIDとsongid場合、それは代わりに置いてくださいlisten_countフィールドをインクリメントします。私が今得ているエラーは、「UNIQUE制約に失敗しました:api_listen_record.id」です。
この機能を実装するより洗練された方法やエラーを修正する方法はありますか?
編集:私はそこにupdate_or_createメソッドがありますが、私はどのようにポスト/ポストメソッドでコンテキストでそれを使用するのですか?
(http://stackoverflow.com/questions/14115318/create-django-model-or-update-if-exists)[存在する場合は、Djangoのモデルやアップデートを作成] – Dap