我正在制作一个应用程序,它将接受库存信息,如序列号和每一个其他细节,然后我正在制作另一个表单,将验证从上一个表单的条目。
我尝试了多个解决方案,但在相同的错误上可用,但在这里没有任何帮助。
我在这里粘贴代码。如果还有什么需要,请发表意见
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/保留_应用程序
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中完成条目。
我是新来的,所以如果你能帮助我,我会非常感激,因为我被困在这里这么长时间了。
谢谢,Sameer
发布于 2021-03-19 12:48:54
由于循环导入而导致的错误,您可以这样解决。请使用to=‘’在外键和ManytoMany字段中,在下面的示例中,我们不需要从应用程序咨询中导入模型问题
from django.contrib.auth.models import User
from django.db import models
class Customer(models.Model):
name = models.ForeignKey(User, null=True)
gender = models.CharField(max_length=100)
skin_type = models.CharField(max_length=1000)
hair_type = models.CharField(max_length=1000)
bookmarked = models.ManyToManyField(to='consult.Question')
def __str__(self):
return str(self.name)https://stackoverflow.com/questions/66702478
复制相似问题