Skip to main content
 首页 » 编程设计

python之Django View 不保存到模型

2024年08月16日34mfryf

我有一个 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) 

希望对您有所帮助,祝您编码愉快!