【发布时间】:2022-10-07 08:48:44
【问题描述】:
不幸的是,我无法摆脱代码中发现的问题: 我创建了一个新模型来区分销售订单和采购订单。 问题是,当我创建相关对象时,绝不会识别主键。 通过管理部分,我创建了对象,但如果我尝试单击它,则无法识别它,也无法删除它。 通过 Robo 3T 我注意到与第一个模型的订单相比,第二个模型少了一个字段,即与 id 相关的字段。 有问题的模型实际上是相同的,但一个有效,另一个无效。
模型.py
from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
from django.utils import timezone
class Profile(models.Model):
user_profile=models.ForeignKey(User,on_delete=models.CASCADE)
btc=models.IntegerField(default=5)
usd=models.IntegerField(default=100000)
initial_balance=models.IntegerField()
class Order(models.Model):
profile=models.ForeignKey(User,on_delete=models.CASCADE)
datetime=models.DateTimeField(default=timezone.now())
price=models.FloatField()
quantity=models.FloatField()
class SellOrder(models.Model):
buyer_profile=models.ForeignKey(User,on_delete=models.CASCADE)
buyer_datetime=models.DateTimeField(default=timezone.now())
buyer_price=models.FloatField()
buyer_quantity=models.FloatField()
视图.py
from django.shortcuts import render,redirect,get_object_or_404
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from .models import Profile,Order, SellOrder
from django.views.decorators.csrf import csrf_exempt
from .forms import OrderForm, SellOrderForm
import requests
def home_page(request):
price=get_price()
return render(request,\'app/home_page.html\',{\'price\':price})
@csrf_exempt
def register_user(request):
price=get_price()
if request.method==\'POST\':
form=UserCreationForm(request.POST)
if form.is_valid():
form.save()
username=form.cleaned_data[\'username\']
password=form.cleaned_data[\'password1\']
user=authenticate(username=username,password=password)
login(request,user)
messages.success(request,\"Registration Successful!\")
profile=Profile()
profile.user_profile=request.user
profile.initial_balance=100000+(price*5)
profile.save()
return redirect(\'profile\')
else:
form=UserCreationForm()
return render(request,\'app/register_user.html\',{\'form\':form,\'price\':price})
def logout_user(request):
logout(request)
messages.success(request, \"You were logged out!\")
return redirect(\"home_page\")
@csrf_exempt
def login_user(request):
price=get_price()
if request.method==\"POST\":
username=request.POST[\'username\']
password=request.POST[\'password\']
user=authenticate(request,username=username,password=password)
if user is not None:
login(request,user)
return redirect(\'profile\')
else:
messages.success(request,\'There was an error logging in, try again...\')
return render(request,\'app/login_user.html\',{\'price\':price})
else:
return render(request,\'app/login_user.html\',{\'price\':price})
def personal_profile(request):
price = get_price()
profile=Profile.objects.get(user_profile=request.user)
return render(request,\'app/logged_in.html\',{\'username\':profile.user_profile,\'btc\':profile.btc,\'price\':price,\'usd\':profile.usd})
def publish_order(request):
price = get_price()
if request.method==\"POST\":
form=OrderForm(request.POST)
if form.is_valid():
order=form.save(commit=False)
profile=Profile.objects.get(user_profile=request.user)
if (profile.btc-order.quantity)>=0:
profile.btc-=order.quantity
order.profile = request.user
order.save()
profile.save()
messages.success(request, \'Offer published!\')
return redirect(\'profile\')
else:
messages.success(request, \'You dont have enough bitcoins!\')
return redirect(\'profile\')
else:
form=OrderForm()
return render(request,\'app/new_order.html\',{\'form\':form,\'price\':price})
def orders_list(request):
price = get_price()
orders=Order.objects.all()
sellorders=SellOrder.objects.all()
return render(request,\'app/orders_list.html\',{\'orders\':orders,\'price\':price,\'sellorders\':sellorders})
def order_details(request,pk):
price = get_price()
order=get_object_or_404(Order,pk=pk)
return render(request,\'app/order_details.html\',{\'order\':order,\'price\':price})
def purchase(request,pk):
price = get_price()
buyer_profile=Profile.objects.get(user_profile=request.user)
order=Order.objects.get(pk=pk)
seller_profile=Profile.objects.get(user_profile=order.profile)
if buyer_profile.usd >= order.price:
buyer_profile.btc+=order.quantity
buyer_profile.usd -= order.price
seller_profile.usd+=order.price
buyer_profile.save()
seller_profile.save()
order.delete()
else:
messages.success(request,\'Ops! You dont have enough money...\')
return redirect(\'profile\')
return render(request,\'app/purchase.html\',{\'quantity\':order.quantity,\'seller\':seller_profile.user_profile,\'price\':price})
URL=\"https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD\"
def get_price():
try:
response=requests.get(URL.format()).json()
a=int(response[\'USD\'])
return a
except:
return False
def analytics(request):
price=get_price()
profile=Profile.objects.get(user_profile=request.user)
initial_balance=profile.initial_balance
actual_balance=profile.usd+(profile.btc*price)
total_gain=actual_balance-initial_balance
return render(request,\'app/analytics.html\',{\'initial_balance\':initial_balance,\'actual_balance\':actual_balance,\'gain\':total_gain,\'price\':price})
def publish_buy_order(request):
price = get_price()
if request.method==\"POST\":
form=SellOrderForm(request.POST)
if form.is_valid():
order=form.save(commit=False)
profile=Profile.objects.get(user_profile=request.user)
if (profile.usd-order.price)>=0:
profile.usd-=order.price
order.buyer_profile = request.user
order.save()
profile.save()
messages.success(request, \'Offer published!\')
return redirect(\'profile\')
else:
messages.success(request, \'Ops. There is an error... Try again.\')
return redirect(\'profile\')
else:
form=OrderForm()
return render(request,\'app/new_order.html\',{\'form\':form,\'price\':price})
def sell(request,pk):
price = get_price()
seller_profile=Profile.objects.get(user_profile=request.user)
order=SellOrder.objects.get(pk=pk)
buyer_profile=Profile.objects.get(user_profile=order.buyer_profile)
if seller_profile.btc >= order.quantity:
seller_profile.btc-=order.quantity
buyer_profile.btc+=order.quantity
seller_profile.usd+=order.price
buyer_profile.save()
seller_profile.save()
order.delete()
else:
messages.success(request,\'Ops! You dont have enough BTC...\')
return redirect(\'profile\')
return render(request,\'app/sell.html\',{\'quantity\':order.quantity,\'buyer\':buyer_profile.user_profile,\'price\':price})
def buy_order_details(request,pk):
price = get_price()
order=get_object_or_404(SellOrder,pk=pk)
return render(request,\'app/buy_order_details.html\',{\'order\':order,\'price\':price})
标签: python django django-models django-views