[英]ManyToMany relationship in django models
我试图在与manyToMany关系的三个表之间添加关系。 我正在学习python和Django框架的新知识。 根据要求,用户可以添加项目,还可以为另一个用户添加查看权限。 这意味着一个用户可以有多个项目,而一个项目也可以有多个用户。 用户模型是django的默认用户模型。
项目模型为:
项目/模型
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Projects(models.Model):
project_title = models.CharField(max_length=255)
description = models.TextField(blank=True)
privacy = models.SmallIntegerField(default=1) # 1 for public, 2 for private
status = models.SmallIntegerField(default=1) #1 for active, 2 for deactive, 3 for delete, 4 for depricated
created_at = models.DateTimeField('date published', blank=True, default=False)
users = models.ManyToManyField(User, through="UserProjects")
class UserProjects(models.Model):
user = models.ForeignKey(User,blank=True, default=False)
project = models.ForeignKey(Projects,blank=True)
owner = models.SmallIntegerField(default=1)
没用 当我添加一个项目时会产生一些错误。
Traceback (most recent call last):
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\Programs\Python\RestClient\Projects\views.py", line 29, in add
p.save()
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\base.py", line 806, in save
force_update=force_update, update_fields=update_fields)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\base.py", line 836, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, upda
te_fields)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\base.py", line 922, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\base.py", line 961, in _do_insert
using=using, raw=raw)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\query.py", line 1063, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\sql\compiler.py", line 1098, in execute_sql
for sql, params in self.as_sql():
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\sql\compiler.py", line 1051, in as_sql
for obj in self.query.objs
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\sql\compiler.py", line 1051, in <listcomp>
for obj in self.query.objs
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\sql\compiler.py", line 1050, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in field
s]
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\sql\compiler.py", line 990, in prepare_value
value = field.get_db_prep_save(value, connection=self.connection)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\fields\__init__.py", line 770, in get_db_prep_save
prepared=False)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\fields\__init__.py", line 1459, in get_db_prep_value
value = self.get_prep_value(value)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\fields\__init__.py", line 1438, in get_prep_value
value = super(DateTimeField, self).get_prep_value(value)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\fields\__init__.py", line 1296, in get_prep_value
return self.to_python(value)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\db\models\fields\__init__.py", line 1399, in to_python
parsed = parse_datetime(value)
File "C:\Users\Jitendra\AppData\Local\Programs\Python\Python35-32\lib\site-pac
kages\django\utils\dateparse.py", line 94, in parse_datetime
match = datetime_re.match(value)
TypeError: expected string or bytes-like object
[28/Jul/2017 22:25:10] "POST /projects/add/ HTTP/1.1" 500 145532
这是projects/view.py
def add(request):
form = ProjectForm()
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
p = Projects(project_title=request.POST.get("project_title"), description=request.POST.get("description"),
status=1, privacy=1)
p.save()
sp = UserProjects(user_id=request.user.id, project_id=p.id)
sp.save()
p.users.add(sp)
messages.success(request, 'Profile details updated.')
view_data = {
"form": form,
'title': "Add new project"
}
return render(request, 'projects/add.html', view_data)
我不知道,这怎么了。 请指导我。 谢谢
来自Django文档 :
类DateTimeField(** kwargs)
默认小部件:DateTimeInput
空值:无
规范化为:Python datetime.datetime对象。
验证给定的值是datetime.datetime,datetime.date还是以特定datetime格式格式化的字符串。
错误消息键:必填,无效
您可以看到DateTimeField验证给定的值是datetime.datetime,datetime.date还是以特定datetime格式格式化的字符串,但是您在模型定义中设置了default=False
。 所以我想问题就在那儿。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.