Tôi đang gặp sự cố với dự án Django mà tôi đang làm việc. Bây giờ tôi có hai ứng dụng, yêu cầu một chút trùng lặp. Tôi đã thực sự chỉ bắt đầu dự án thứ hai (gọi là workflow
) và tôi đang cố gắng tạo biểu mẫu đầu tiên cho ứng dụng đó. Đơn đăng ký đầu tiên của tôi được gọi là po
. Trong ứng dụng workflow
Tôi có một lớp được gọi là WorkflowObject
, mà (hiện tại) chỉ có một thuộc tính duy nhất - một khóa ngoại cho một số PurchaseOrder
, được xác định trong po/models.py
. Tôi đã nhập lớp học đó với from po.models import PurchaseOrder
.Django: ValueError: Không thể tạo trường biểu mẫu vì mô hình liên quan của nó chưa được tải
Điều tôi đang cố gắng thực hiện là có một trang nơi người dùng tạo một PurchaseOrder
mới. Điều này làm việc tốt (đó là hình thức tương tự mà tôi đã sử dụng trong ứng dụng PurchaseOrder
của tôi), và sau đó sử dụng trường hợp đó của lớp học để tạo ra một WorkflowObject
. Vấn đề bây giờ, là tôi nhận được lỗi: ValueError: Cannot create form field for 'purchase' yet, because its related model 'PurchaseOrder' has not been loaded yet
. Tôi thực sự không chắc chắn nên bắt đầu từ đâu. Nó hoạt động ổn định (cho phép tôi tạo một PurchaseOrder
mới và chuyển tiếp tới url có khóa chính trong url) cho đến khi tôi thêm chế độ xem cho phép tôi tạo WorkflowObject
mới. Tôi sẽ đưa độ xem cụ thể ở đây:
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django_tables2 import RequestConfig
from po.models import PurchaseOrderForm, PurchaseOrder
from workflow.models import POObject, WorkflowForm
def new2(request, number):
po=PurcchaseOrder.objects.get(pk=number)
if request.method == 'POST':
form = WorkflowForm(request.POST)
if form.is_valid():
new_flow = form.save()
return HttpResponse('Good')
else:
return render(request, 'new-workflow.html', {'form': form, 'purchase': po})
else:
form = WorkflowForm()
return render(request, 'new-workflow.html', {'form': form, 'purchase': po})
Các dòng mã mà dường như được gây ra lỗi (hoặc ít nhất, một trong những dòng được hiển thị trong traceback) là:
class WorkflowForm(ModelForm):
purchase = forms.ModelChoiceField(queryset = PurchaseOrder.objects.all())
EDIT: tôi dường như đã thực hiện một sai lầm rất noob, và bao gồm dấu ngoặc đơn trong định nghĩa của tôi về WorkflowObject
, có nghĩa là, tôi đã nói purchase=models.ForeignKey('PurchaseOrder')
, thay vì purchase=models.ForeignKey(PurchaseOrder)
Bạn nên thử tải ứng dụng PurchaseOrder trước ứng dụng WorkflowForm trong cài đặt của mình. Điều đó có thể hiệu quả. – tsurantino