Userテーブルとのリレーション
登録したユーザしか書き込めないwebpageを作っているんだけど、書き込む際にユーザIDの取得方法にハマってます・・・
webpage自体は至って簡単な物で、登録されているユーザがSecondLifeの仮装空間の場所を登録するというだけの品物。
自分で勝手に作ったテーブルurltblと、django.contrib.auth.modelのテーブルUserとリレーションをしている。
テーブルは下記のような感じ。
from django.db import models from django.contrib.auth.models import User # Relate to this # Create your models here. class urltbl(models.Model): region = models.CharField(max_length=255,db_index=True) x = models.IntegerField() y = models.IntegerField() z = models.IntegerField(default='22') region_title = models.CharField(max_length=255) mesg = models.TextField() updateTime = models.DateTimeField(auto_now=True) user = models.ForeignKey(User) def __unicode__ (self): return "/".join(["http://slurl.com","secondlife",self.region,self.x,self.y,self.z]) class Admin: pass
で、登録処理は下記のような感じ。困っているのは、POSTのデータにはユーザIDが入れれない事。そりゃ入らないのは解るし、入れれる必要は無いはず。じゃあ、どうやってurltbl.user_idとUserテーブルを関連づけるんだとなると、よくわからない・・・
むぅ・・・
from django import oldforms,forms from django.contrib.auth.models import User from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth import REDIRECT_FIELD_NAME,authenticate, login, logout from django.contrib.sites.models import Site, RequestSite from django.shortcuts import get_object_or_404, render_to_response from django.template import Context, loader from django.http import HttpResponse, HttpResponseRedirect from django.template import RequestContext from django.conf import settings from slbook.slurl.models import urltbl # ... 何か他関係ないコードがずらずらと... def top(req): pagePath = _template_path + 'user_region_page.html' lists = {'urltbl_form':forms.FormWrapper(urltbl.AddManipulator(),{},{}), 'regions_lists':None, 'comment_lists':None} if not req.user.is_authenticated(): return render_to_response(_template_path+'user_is_not_login.html', lists, context_instance=RequestContext(req)) try: url_object = req.user lists['regions_lists'] = url_object.urltbl_set.all()[:10] lists['comment_lists'] = url_object.comment_set.all()[:10] except ObjectDoseNotExist: pass url_manipulator = urltbl.AddManipulator() url_data = None if req.POST: post_data = req.POST.copy() # post_data['user_id'] = url_object.id errors = url_manipulator.get_validation_errors(post_data) url_manipulator.do_html2python(post_data) if not errors: place = url_manipulator.save(post_data) lists['region_save'] = 'validate' lists['errors'] = None else: lists['region_save'] = '' lists['errors'] = errors lists['debug_data'] = post_data else: errors = post_data = {} return render_to_response(pagePath,lists, context_instance=RequestContext(req))