at_yasu's blog

ロード的なことを

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))