我有一个 View ,当用户单击网站上的按钮时,它会提取 JSON 数据(来自 Coinbase API)并将其转换为字符串,并且应该将提取的字符串保存到当前用户的帐户.
每当他们点击按钮时,它都会拉动字符串,但没有任何内容保存到帐户中,这就是问题所在。
View .py
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from ico_login.models import UserAddress
from coinbase.wallet.client import Client
@login_required()
def generate_address_btc(request, *args, **kwargs):
client = Client('api', 'key')
r = client.get_addresses('account_id')
address = r['data'][0]['address']
request.user.address = str(address)
request.user.save()
return HttpResponse(address)
模型.py
from django.db import models
from django.contrib.auth.models import User
class UserAddress(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
address = models.CharField(max_length=300, default=' ')
网址.py
from django.contrib import admin
from django.urls import path, include
from ico_details import views
urlpatterns = [
path('create_address/', views.generate_address_btc, name='generate')
]
请您参考如下方法:
在您的 View 中,您编写了 request.user.address = ...,因此您将属性 address 添加到 User 对象。据我阅读您的代码,这不是您想要的。您想将 str(address) 放入与 User 对象相关的对象 UserAddress 的字段 address来自 request.user,对吧?!
因此,这里是建议的编辑:
模型.py
from django.db import models
from django.contrib.auth.models import User
class UserAddress(models.Model):
# next line changed
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_address')
address = models.CharField(max_length=300, default=' ')
views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from ico_login.models import UserAddress
from coinbase.wallet.client import Client
@login_required()
def generate_address_btc(request, *args, **kwargs):
client = Client('api', 'key')
r = client.get_addresses('account_id')
address = r['data'][0]['address']
# next 2 lines changed
request.user.user_address.address = str(address)
request.user.user_address.save()
return HttpResponse(address)
希望对您有所帮助,祝您编码愉快!
