[英]ManyToMany relationship in django models
I'm trying to add relation between three table with manyToMany relationship. 我试图在与manyToMany关系的三个表之间添加关系。 I'm learning python and new for Django framework.
我正在学习python和Django框架的新知识。 For requirement, An user can add a project and he also can add permission for view for another user.
根据要求,用户可以添加项目,还可以为另一个用户添加查看权限。 It means an user can have multiple projects and a project also have multiple user.
这意味着一个用户可以有多个项目,而一个项目也可以有多个用户。 User model is default user model of django.
用户模型是django的默认用户模型。
and the project model is: 项目模型为:
Projects/model.py 项目/模型
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)
It's not working. 没用 When i'm add a project is produce some error..
当我添加一个项目时会产生一些错误。
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
And here the projects/view.py
这是
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)
I dont know, whats wrong with it. 我不知道,这怎么了。 Please guide me.
请指导我。 Thanks
谢谢
From Django docs : 来自Django文档 :
class DateTimeField(**kwargs)
类DateTimeField(** kwargs)
Default widget: DateTimeInput
默认小部件:DateTimeInput
Empty value: None
空值:无
Normalizes to: A Python datetime.datetime object.
规范化为:Python datetime.datetime对象。
Validates that the given value is either a datetime.datetime, datetime.date or string formatted in a particular datetime format.
验证给定的值是datetime.datetime,datetime.date还是以特定datetime格式格式化的字符串。
Error message keys: required, invalid
错误消息键:必填,无效
You can read that DateTimeField validates that given value is either datetime.datetime, datetime.date or string formatted in particular datetime format, however you set default=False
in your model definitions. 您可以看到DateTimeField验证给定的值是datetime.datetime,datetime.date还是以特定datetime格式格式化的字符串,但是您在模型定义中设置了
default=False
。 So I would guess the problem lays in there. 所以我想问题就在那儿。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.