0

私の Web サイトでは、各ユーザーが独自のログイン ID とパスワードを持っているため、ユーザーがログインしている場合、そのユーザーは自分のレコードのみを追加、編集、および更新できます。

models.py は

class Report(models.Model):
    user = models.ForeignKey(User, null=False)
    name = models.CharField(max_length=20, null=True, blank=True)

ビュー.py

def profile(request):      
    if request.method == 'POST':    
        reportform = ReportForm(request.POST)

        if reportform.is_valid():
            report = reportform.save(commit=False)
            report.user = request.user
            report.save()
            return redirect('/index/')

    else:
        report = Report.objects.get()
        reportform = ReportForm(instance=report)

    return render_to_response('report/index.html',
                   { 'form': reportform, },
                   context_instance=RequestContext(request))

ユーザーには 1 つの年齢が必要であり、データベース内の 1 行のデータに含まれている必要があります。

  1. データベースにデータがない場合、つまりユーザーにとって初めての場合、ユーザーはデータベースにデータを挿入することができます。
  2. ユーザーがページを再度開くと、挿入されたデータが編集可能モードで表示されます。

「新しいユーザーがGmailアカウントを作成した場合、最初はアカウントを作成でき、詳細の編集と更新のみが可能です」というシナリオと同じです。私のWebサイトに実装したいのと同じ手順です。

上記のコードで試してみましたが、データベースにデータを挿入できません。mysql dbに直接挿入してチェックしたので、挿入されたデータは編集可能モードで表示できますが、それを変更して保存すると、dbに別のデータ行が作成されます。

次に、初めて挿入しようとすると、次のトレースが返されます。

Environment:    

Request Method: GET
Request URL: http://192.168.100.10/report/index/

Django Version: 1.3.7
Python Version: 2.7.0
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'django.contrib.humanize',
 'django.contrib.staticfiles',
 'south',
 'collect',
 'incident',
 'report_settings']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.transaction.TransactionMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware')


Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/root/Projects/ir/incident/views.py" in when
  559.         report = Report.objects.get()
File "/usr/lib/python2.7/site-packages/django/db/models/manager.py" in get
  132.         return self.get_query_set().get(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py" in get
  349.                     % self.model._meta.object_name)

Exception Type: DoesNotExist at report/index/
Exception Value: Report matching query does not exist.
4

2 に答える 2

0
report = Report.objects.get()
reportform = ReportForm(instance=report)

例の 1 つで空の .get() を実行しようとしたところ、同様のエラーが発生しました。すべてのエンティティを取得しようとしている場合は、すべてを試してください。取得のみでは、1 つの一意のアイテムが返されるためです。

report = Report.ojbects.all()
于 2017-07-02T22:22:25.337 に答える