我遇到了问题,我找不到办法。我找到了这篇文章,但无法使其发挥作用。 Create django object using a view with no form
我收到以下错误
/ work_orders / new_order /'module'对象中的AttributeError没有 属性'OrderMovements'
这是代码
models.py
from django.db import models
# Importamos los movimientos disponibles
from .choices import *
# Importaos Stores y Clients
from client.models import Client
from store.models import Store
# Create your models here.
class WorkOrder(models.Model):
fk_client = models.ForeignKey(Client)
fk_store = models.ForeignKey(Store)
sector = models.IntegerField(choices=SECTOR_CHOICES, default=1)
article = models.CharField(max_length=20)
serial = models.CharField(max_length=25)
work = models.CharField(max_length=20)
article_details = models.CharField(max_length=255)
cash_advance = models.DecimalField(max_digits=6, decimal_places=2,
default=0)
initial_price = models.DecimalField(max_digits=6, decimal_places=2,
default=0)
randpassw = models.CharField(default='12345', max_length=5, blank=True,
null=True)
warranty = models.PositiveSmallIntegerField(default=0, blank=True,
null=True)
last_status = models.IntegerField(choices=STATUS_CHOICES, default=1)
def get_id(self, obj):
return obj.id
class OrderMovements(models.Model):
fk_workorder = models.ForeignKey(WorkOrder)
status = models.IntegerField(choices=STATUS_CHOICES, default=1)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return self.status
和views.py中的视图
def new_order(request):
if not request.user.is_authenticated():
return redirect('auth_login')
title = "Nueva Orden de trabajo"
store = request.user.userprofile.fk_store
if 'dni_cuit' in request.session:
dni_cuit = request.session.get('dni_cuit')
if Client.objects.get(dni_cuit=dni_cuit):
dni_cuit = request.session.pop('dni_cuit')
client = Client.objects.get(dni_cuit=dni_cuit)
form = NewOrderForm(request.POST or None,
initial={'fk_store': store,
'fk_client': client})
context = {
"title": title,
"form": form
}
else:
return redirect('new_client')
else:
form = NewOrderForm(request.POST or None,
initial={'fk_store': store})
context = {
"title": title,
"form": form
}
# Si el formulario es valido guardamos el contenido
if form.is_valid():
order = form.save(commit=False)
# Generamos el password aleatorio y lo guardamos en la instancia
randpassw = get_random_string(length=5, allowed_chars='abcdefghijclmnopqrstuvwxyz0123456789')
order.randpassw = randpassw
# Guardamos el nuevo registro (nueva orden de trabajo)
order.save()
# Tomamos el ID de la orden generada y lo guardamos en variable
order_last_id = WorkOrder.objects.latest('id')
# Si la orden fue generada en CuyoTek se guarda como recibida en Cuyotek
if str(store) == "CuyoTek":
# Status 3 es "Recibida en Cuyotek"
order_movement = models.OrderMovements(fk_workorder=order_last_id,
status=3)
# Si la orden no fue generada por un asociado de CuyoTek se registra
# como "En Tienda Asociada"
else:
order_movement = models.OrderMovements(fk_workorder=order_last_id,
status=2)
order_movement.save()
context = {
"title": "Orden Creada",
}
return render(request, "workorders/new_order.html", context)
我要做的就是这个。当用户创建一个新的WorkOrder时,我必须在模型OrderMovements中保存一个新的寄存器,其中创建了工作订单的id。如果用户的商店是CuyoTek,则状态为“3”,否则为“2”。
但这不起作用。
答案 0 :(得分:1)
这是完整的views.py
from django.shortcuts import render, redirect
from .forms import *
from .models import *
from client.models import Client
# Importamos libreria para crear cadena aleatoria
from django.utils.crypto import get_random_string
# Create your views here.
def index(request):
if not request.user.is_authenticated():
return redirect('auth_login')
title = "Lista de Ordenes"
queryset = WorkOrder.objects.all()
context = {
'title': title,
'queryset': queryset,
}
return render(request, "workorders/index.html", context)
def new_order(request):
if not request.user.is_authenticated():
return redirect('auth_login')
title = "Nueva Orden de trabajo"
store = request.user.userprofile.fk_store
if 'dni_cuit' in request.session:
dni_cuit = request.session.get('dni_cuit')
if Client.objects.get(dni_cuit=dni_cuit):
dni_cuit = request.session.pop('dni_cuit')
client = Client.objects.get(dni_cuit=dni_cuit)
form = NewOrderForm(request.POST or None,
initial={'fk_store': store,
'fk_client': client})
context = {
"title": title,
"form": form
}
else:
return redirect('new_client')
else:
form = NewOrderForm(request.POST or None,
initial={'fk_store': store})
context = {
"title": title,
"form": form
}
# Si el formulario es valido guardamos el contenido
if form.is_valid():
order = form.save(commit=False)
# Generamos el password aleatorio y lo guardamos en la instancia
randpassw = get_random_string(length=5, allowed_chars='abcdefghijclm' +
'nopqrstuvwxyz' +
'0123456789')
order.randpassw = randpassw
# Guardamos el nuevo registro (nueva orden de trabajo)
order.save()
# Tomamos el ID de la orden generada y lo guardamos en variable
order_last_id = WorkOrder.objects.latest('id')
# Si la orden fue generada en CuyoTek se guarda como recibida en Cuyote
if str(store) == "CuyoTek":
# Status 3 es "Recibida en Cuyotek"
order_movement = models.OrderMovements(fk_workorder=order_last_id,
status=3)
# Si la orden no fue generada por un asociado de CuyoTek se registra
# como "En Tienda Asociada"
else:
order_movement = models.OrderMovements(fk_workorder=order_last_id,
status=2)
order_movement.save()
context = {
"title": "Orden Creada",
}
return render(request, "workorders/new_order.html", context)
谢谢,感谢建议的编辑,帮助我逐步提高我的英语水平