ForeignKeyはオブジェクトの代入でも登録できます。

今日Djangoで物を作っているときに参考にしたところ
リレーションオブジェクトリファレンス — Django v1.0 documentation
クエリを生成する — Django v1.0 documentation

ForeignKey や ManyToManyField の保存¶

ForeignKey フィールドの更新は、通常のフィールドへの変更と同じです。すな わち、適切な型のオブジェクトを代入して保存すると、フィールドの値を更新でき ます:

>>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()

ManyToManyField の更新は少し違います。リレーションにレコードを一つ追加 したい場合は add() メソッドを使います:

>> joe = Author.objects.create(name="Joe")
>> entry.authors.add(joe)

間違った型のオブジェクトを外部キーに代入したり add() したりすると Django はエラーを出します。

結構躓いた

こんな感じのものがある

class UserAddTags (models.Model):
	user = models.ForeignKey(User)
	tags = models.ManyToManyField(Tags)
	res = models.ForeignKey(Res)
	datetime = models.DateTimeField("useraddtag_datetime")

こんなときに、これらにすべてにリレーションを登録するときはどうするか。
今までは、create()やadd()を使っていました。実際tagsはManyToManyの関係なのでそれでいけますが、userとresはどうやって登録するの?
上の引用から、オブジェクトの作成で、代入しても良いらしいです。
よって、これに全部登録するときはこんな感じでリレーションの定義が出来ました。

#resとかtagsとかは想定のもの
r1 = Res.objects.get(id=1)
user1 = User.objects.get(id=2) #views.pyならrequest.userで取得しても良いはず
tags = Tags.objects.filter(keyword="test")

uat = UserAddTags(datetime=datenow,)
uat.res = r1
uat.user = user1
uat.save()

#ManyToManyなどで複数のオブジェクトの登録は
#add()を繰り返しでまわす
for i in tags:
	uat.tags.add(i)

おまけ

ちなみに、オブジェクトの登録ではなくて、id(user_id, res_id)を代入しても登録できましたが
これはありなんでしょうかね・・・

r1 = Res.objects.get(id=1)
user1 = User.objects.get(id=2) #views.pyならrequest.userで取得しても良いはず
tags = Tags.objects.filter(keyword="test"

uat = UserAddTags(datetime=datenow,
                  res_id = res_detail.id,
                  user_id = user1.id,
                  )
uat.save()

#ManyToManyなどで複数のオブジェクトの登録は
#add()を繰り返しでまわす
for i in tags:
	uat.tags.add(i)