【发布时间】:2021-06-16 12:37:26
【问题描述】:
我正在制作一个应用程序,它将接受序列号和所有其他详细信息等库存信息,然后我正在制作另一个表单,它将验证前一个表单中的条目。
我尝试了多种解决方案,这些解决方案在同一个错误中可用,但这里没有任何帮助。
我在这里粘贴代码。 如果还有什么需要的,欢迎评论
models.py/inventory_app
from django.db import models
#from reservation_app.models import Reserve
class Form1(models.Model):
item = models.CharField(max_length=125)
quantity = models.IntegerField(default=0)
vendor = models.CharField(max_length=125)
inward = models.IntegerField(default=1234)
sno = models.ManyToManyField(max_length=100, to='reservation_app.Reserve')
date = models.DateField()
date_received = models.DateField()
def __str__(self):
return self.item
如果我取消注释该行:
#from reservation_app.models import Reserve
我收到循环导入错误
ImportError: cannot import name 'Form1' from partially initialized module 'inventory_app.models' (most likely due to a circular import) (C:\Users\satharkar\Desktop\altiostar\inventory\inventory_app\models.py)
models.py/reservation_app
from django.db import models
from inventory_app.models import Form1
# Create your models here.
class Reserve(models.Model):
company = models.CharField(max_length=125)
sno = models.ForeignKey(to='inventory_app.Form1', null=True, on_delete= models.SET_NULL)
date_req = models.DateField()
我的所有更改都造成了巨大的混乱,以前我能够从 models.py/inventory_app 中获取输入,并且能够在 models.py/reservation_app 中看到它,但现在情况并非如此。
每当我尝试进入时,我都会收到以下错误:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/form1/
Django Version: 3.1.6
Python Version: 3.9.2
Installed Applications:
['django_filters',
'inventory_app.apps.InventoryAppConfig',
'reservation_app.apps.ReservationAppConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'import_export']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\satharkar\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\satharkar\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\satharkar\Desktop\altiostar\inventory\inventory_app\views.py", line 28, in form1
form1 = Form1(item=item, quantity=quantity , inward=inward , sno=sno , vendor=vendor, date=datetime.datetime.now() , date_received=date_received ) #security_stamp_date=security_stamp_date
File "C:\Users\satharkar\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\base.py", line 496, in __init__
_setattr(self, prop, kwargs[prop])
File "C:\Users\satharkar\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\fields\related_descriptors.py", line 545, in __set__
raise TypeError(
Exception Type: TypeError at /form1/
Exception Value: Direct assignment to the forward side of a many-to-many set is prohibited. Use sno.set() instead.
views.py/reservation_app
from django.shortcuts import render, HttpResponse
from .models import Reserve
from reservation_app.models import Reserve
# Create your views here.
def reserve(request):
if request.method == "POST":
company = request.POST.get('company')
sno = request.POST.get('sno')
date_req = request.POST.get('date_req')
reserve = Reserve(company=company, sno=sno, date_req=date_req ) #security_stamp_date=security_stamp_date
reserve.save()
return render(request, 'home.html')
views.py/inventory_app
from django.shortcuts import render, HttpResponse
from inventory_app.models import Form1
import datetime
from .models import Form1
def form1(request):
if request.method == "POST":
item = request.POST.get('item')
quantity = request.POST.get('quantity')
sno = request.POST.get('sno')
inward = request.POST.get('inward')
vendor = request.POST.get('vendor')
date_received = request.POST.get('date_received')
# security_stamp_date = request.POST.get('security_stamp_date')
form1 = Form1(item=item, quantity=quantity , inward=inward , sno=sno , vendor=vendor, date=datetime.datetime.now() , date_received=date_received ) #security_stamp_date=security_stamp_date
form1.save()
return render(request, 'form1.html')
form1.html/inventory_app(如果我粘贴完整的代码,我认为这将是不必要的,只发布所需的代码)
<div class="form-group">
<label for="exampleFormControlInput1">Serial Number</label>
<input type="text" class="form-control" id="exampleFormControlInput1" name= "sno" placeholder="S/N123ABC123" required >
</div>
home.html/reservation_app
<div class="form-group">
<label for="exampleFormControlInput1">Radio Serial Number</label>
<input type="text" class="form-control" id="exampleFormControlInput1" name= "sno" placeholder="S/N123ABC123" required >
</div>
有人可以帮我解决这个问题吗?
我希望 sno 的条目应该来自 models.py/inventory_app 并且它应该显示在 models.py/reservation_app 上,或者你可以说它应该得到验证,然后只有条目应该从 reservation_app 完成。
我是新手,所以如果你能帮助我,我将不胜感激。
谢谢, 萨米尔
【问题讨论】:
标签: python python-3.x django django-models django-forms