Django auth_login给出值错误( "cannot force an update in save() with no primary key." )



这个问题与其他有答案的问题不同

最近我把我的数据库引擎改成了";Djongo";从";sqlite3";。在成功完成迁移并成功执行runserver命令后,当我试图登录Django admin时,我收到了这个错误。


DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'data',
'CLIENT': {
'host': 'mongodb+srv://admin15:mkone1@data-cluster.cu6pe.mongodb.net/useer_db?retryWrites=true&w=majority',
}
}
}

回溯错误:

Environment:
Request Method: POST
Request URL: http://localhost:8000/admin/login/?next=/admin/
Django Version: 3.1.7
Python Version: 3.9.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'map.apps.MapConfig',
]
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback (most recent call last):
File "E:atom_djangomappingvenvlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "E:atom_djangomappingvenvlibsite-packagesdjangocorehandlersbase.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoviewsdecoratorscache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangocontribadminsites.py", line 410, in login
return LoginView.as_view(**defaults)(request)
File "E:atom_djangomappingvenvlibsite-packagesdjangoviewsgenericbase.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoutilsdecorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoviewsdecoratorsdebug.py", line 89, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoutilsdecorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoutilsdecorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoutilsdecorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoviewsdecoratorscache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangocontribauthviews.py", line 63, in dispatch
return super().dispatch(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoviewsgenericbase.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangoviewsgenericedit.py", line 142, in post
return self.form_valid(form)
File "E:atom_djangomappingvenvlibsite-packagesdjangocontribauthviews.py", line 92, in form_valid
auth_login(self.request, form.get_user())
File "E:atom_djangomappingvenvlibsite-packagesdjangocontribauth__init__.py", line 132, in login
user_logged_in.send(sender=user.__class__, request=request, user=user)
File "E:atom_djangomappingvenvlibsite-packagesdjangodispatchdispatcher.py", line 177, in send
return [
File "E:atom_djangomappingvenvlibsite-packagesdjangodispatchdispatcher.py", line 178, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "E:atom_djangomappingvenvlibsite-packagesdjangocontribauthmodels.py", line 20, in update_last_login
user.save(update_fields=['last_login'])
File "E:atom_djangomappingvenvlibsite-packagesdjangocontribauthbase_user.py", line 67, in save
super().save(*args, **kwargs)
File "E:atom_djangomappingvenvlibsite-packagesdjangodbmodelsbase.py", line 753, in save
self.save_base(using=using, force_insert=force_insert,
File "E:atom_djangomappingvenvlibsite-packagesdjangodbmodelsbase.py", line 790, in save_base
updated = self._save_table(
File "E:atom_djangomappingvenvlibsite-packagesdjangodbmodelsbase.py", line 855, in _save_table
raise ValueError("Cannot force an update in save() with no primary key.")
Exception Type: ValueError at /admin/login/
Exception Value: Cannot force an update in save() with no primary key.
  • 型号.py:

class Category(models.Model):
category = models.CharField(max_length=40)

def __str__(self):
return self.category

class ProductId(models.Model):
Pcategory = models.ForeignKey(Category, on_delete=models.CASCADE)
prod_id = models.CharField(default=1000, max_length=7)

def __str__(self):
return '%s %s' % (self.prod_id, self.Pcategory)

class Product(models.Model):
Pid = models.ForeignKey(ProductId, on_delete=models.CASCADE)
Pname = models.CharField(max_length=40)
Pcategory = models.ForeignKey(Category, on_delete=models.CASCADE)
Data_source = models.CharField(max_length=120, default="NA")
Vendor_field = models.CharField(max_length=80, default="NA")
is_downloadable = models.BooleanField(default=False)
Delivery_time = models.CharField(max_length=20, default=2)
Punique_name = models.CharField(max_length=40, default="NA")

def __str__(self):
return '%s -> %s' % (self.Pcategory, self.Pname)


class PriceTable(models.Model):
prod_id = models.ForeignKey(Product, on_delete=models.CASCADE)
MinimumPrice = models.FloatField(default=400)

有人请帮帮我。

这只是一个解决办法,而不是一个确切的解决方案:

只要从模型中删除所有外键关系并再次迁移就可以了。

所以这个问题是由Djongo不支持on_delete=models.CASCADE.引起的

只需clr所有迁移,然后再次创建数据库,而不是使用

_id=models.ObjectIdField() 

让它是integer字段,作为带有主键的autoincrement字段,主键由后台的Django模型默认处理。

最新更新