2017-07-28 13 views
1

manyToMany関係を持つ3つのテーブルの間にリレーションシップを追加しようとしています。私はPythonを学んでいて、Djangoフレームワークのために新しいです。要件のために、ユーザーはプロジェクトを追加することができ、別のユーザーのビューのアクセス許可を追加することもできます。 これは、ユーザーが複数のプロジェクトを持つことができ、プロジェクトも複数のユーザーを持つことを意味します。 ユーザモデルはdjangoのデフォルトユーザモデルです。DjangoモデルのManyToMany関係

とプロジェクトモデルは次のとおりです。

プロジェクト/ 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) 

それは働いていません。 私はそれでいただきました!間違っている、知らない

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 docsから感謝

+0

オブジェクトがいつ作成されたかを知りたい場合は、エラーがDateTimeFieldに表示されます。models.DateTimeField(auto_now_add = True、db_index = True)これにより、オブジェクトが作成されたときに現在の日付と時刻が自動的に追加されます – martinB0103

+0

ガイドをありがとうが、別のエラーが発生する:中間モデルを指定するManyToManyFieldでadd()を使用できない。代わりにProjects.UserProjectsのマネージャを使用してください。 – Jitendra

+1

p.users.add(sp) "through"メソッドを使用してモデル自体に割り当て済みなので、これは必要ありません。https://docs.djangoproject.com/ja/dev/topics/db/models/# intermediary-manytomany – martinB0103

答えて

0

クラスDateTimeField型(** kwargsから)

デフォルトのウィジェット:DateTimeInput

空の値:Pythonの日時:

は、データへの正規化なし。 datetimeオブジェクト。

指定された値がdatetime.datetime、datetime.dateまたは特定のdatetime形式でフォーマットされた文字列であることを検証します。

エラーメッセージのキー:必要な、

無効あなたはDateTimeField型は、与えられた値は、特定の日時形式でフォーマットされたdatetime.datetimeの、datetime.dateまたは文字列のいずれかであることを検証し、しかし、あなたがあなたのモデルにdefault=Falseを設定することを読み取ることができます定義。だから私はそこに問題があると推測します。

関連する問題