我试图使用Django创建一个web应用程序的音乐和Django的REST框架 - 问题就出在执行.Everytime用户播放歌曲的聆听记录计数器,计数器对于那个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,但如果用户名和songid,存在,它应该改为投入增加listen_count字段。现在我得到的错误是“唯一约束失败:api_listen_record.id”
是否有实现此功能或如何解决该错误的更优雅的方式?
编辑:我得到的存在update_or_create方法,但我怎么使用Django的REST框架使用它与后/ put方法方面?
的可能的复制(http://stackoverflow.com/questions/14115318/create-django-model-or-update-if-exists) – Dap