如何解决我如何解决此错误:django.db.utils.IntegrityError:NOT NULL约束失败
我正在为我的心愿单按钮/视图编写单元测试,并且试图检查在按下按钮后是否将我的书ISBN和用户ID添加到心愿单中。我已经尝试过了,但是它一直给我标题中指出的错误。
这是我的代码:
#tests.py
class wishlist_view_test(TestCase):
@classmethod
def setUpTestData(cls):
books.objects.create(ISBN = "976354890",bookName = "testingbook1",bookVersion = "1",bookAuthor = "Carlie Presley",bookPublisher = "TeamBananaMonkey1")
retailer.objects.create(retailer= "Amazon",sellerID = 1)
retailer_book.objects.create(condition = "new",reviews = "4.5",ID= 1,bookType = "hardcover",ISBN_id= "976354890",sellerID_id = 1,price = 177.98)
def test_wishlist_button(self):
user = User.objects.create_user(username='user1',password='djangolife')
self.client.login(username='user1',password='djangolife')
response1 = self.client.post(reverse('TextSearch:wishlist',args=("976354890",)))
self.assertEqual(str(wishlist.objects.filter(userid_id= user.id),'<QuerySet [..........]>')
#html code
<form action="{% url 'TextSearch:wishlist' book.pk %}" method="post">
{% csrf_token %}
<input type="hidden" value="{{book.pk}}" name="isbn">
<input type="submit" value="Add to wishlist★">
#views.py
class wishlistView(TemplateView):
template_name = 'TextSearch/wishlist.html'
model = wishlist
def post(self,request,pk):
isbn = self.request.POST.get('isbn')
current_user = request.user
book = wishlist(userid_id = current_user.id,ISBN_id = isbn)
book.save()
return render(request,'TextSearch/wishlist.html')
#models.py
class wishlist (models.Model):
userid = models.ForeignKey(User,on_delete= models.CASCADE)
ISBN = models.ForeignKey(books,on_delete = models.CASCADE)
class books (models.Model):
ISBN = models.CharField(max_length=255,primary_key=True)
bookName = models.CharField(max_length=255)
bookVersion = models.CharField(max_length=255)
bookAuthor = models.CharField(max_length=255)
bookPublisher = models.CharField(max_length=255,default ='NULL')
我正在使用Django的内置用户模型。
***追溯错误***
Traceback (most recent call last):
File "C:\Users\ytann\Desktop\textbooks-for-less-9-website-design\textbooks-for-less-9-website-design\TextSearch\tests.py",line 67,in test_wishlist_button
response1 = self.client.post(reverse('TextSearch:wishlist',)))
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\test\client.py",line 741,in post
response = super().post(path,data=data,content_type=content_type,secure=secure,**extra)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\test\client.py",line 404,in post
return self.generic('POST',path,post_data,content_type,File "C:\Users\ytann\Desktop\python\lib\site-packages\django\test\client.py",line 470,in generic
return self.request(**r)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\test\client.py",line 709,in request
self.check_exception(response)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\test\client.py",line 571,in check_exception
raise exc_value
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\core\handlers\exception.py",line 47,in inner
response = get_response(request)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\core\handlers\base.py",line 179,in _get_response
response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\views\generic\base.py",line 70,in view
return self.dispatch(request,*args,**kwargs)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\views\generic\base.py",line 98,in dispatch
return handler(request,**kwargs)
File "C:\Users\ytann\Desktop\textbooks-for-less-9-website-design\textbooks-for-less-9-website-design\TextSearch\views.py",line 25,in post
book.save()
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\base.py",line 753,in save
self.save_base(using=using,force_insert=force_insert,File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\base.py",line 790,in save_base
updated = self._save_table(
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\base.py",line 895,in _save_table
results = self._do_insert(cls._base_manager,using,fields,returning_fields,raw)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\base.py",line 933,in _do_insert
return manager._insert(
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\manager.py",line 85,in manager_method
return getattr(self.get_queryset(),name)(*args,**kwargs)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\query.py",line 1249,in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\models\sql\compiler.py",line 1397,in execute_sql
cursor.execute(sql,params)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\backends\utils.py",line 66,in execute
return self._execute_with_wrappers(sql,params,many=False,executor=self._execute)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\backends\utils.py",line 75,in _execute_with_wrappers
return executor(sql,many,context)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\backends\utils.py",line 84,in _execute
return self.cursor.execute(sql,params)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\utils.py",line 90,in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\backends\utils.py",params)
File "C:\Users\ytann\Desktop\python\lib\site-packages\django\db\backends\sqlite3\base.py",line 413,in execute
return Database.Cursor.execute(self,query,params)
django.db.utils.IntegrityError: NOT NULL constraint failed: User_wishlist.ISBN_id
**编辑** 我觉得执行self.client.post有点问题,但我似乎无法弄清楚问题所在
解决方法
在test.py中使用此:
response1 = self.client.post(reverse('TextSearch:wishlist',kwargs={'isbn': '976354890'}))
代替:
response1 = self.client.post(reverse('TextSearch:wishlist',args=("976354890",)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。