次のようなリンクとブックマーク モデルがあります。
class Link(models.Model):
url = models.URLField(unique=True)
def __unicode__(self):
return self.url
class Bookmark(models.Model):
title=models.CharField(max_length=200)
user=models.ForeignKey(User)
link=models.ForeignKey(Link)
def __unicode__(self):
return u'%s, %s' % (self.user.username, self.link.url)
ビュー内で、特定の URL を持つリンクが既に存在するかどうかを確認します。次に、このオブジェクトがユーザー名とともに Bookmarks コレクションに渡され、このユーザー名のブックマークが既に存在し、Link インスタンスが既に存在するかどうかが確認されます。
def bookmark_save_page(request):
if request.method == 'POST':
form = BookmarkSaveForm(request.POST)
if form.is_valid():
# Create or get Link
link, dummy = Link.objects.get_or_create(url=form.cleaned_data['url'])
# Create or get bookmark
bookmark, created = Bookmark.objects.get_or_create(user=request.user, link=link)
# Save bookmark to database
bookmark.save()
return HttpResponseRedirect('/user/%s/' % request.user.username)
これは私が理解していないビットです。比較の方法として Link モデル内の url フィールドを取得する方法をどのように知るのでしょうか? Linkモデルでこう定義していたからでしょうか。
def __unicode__(self):
return self.url
私は .NET から来ており、インスタンスを相互に比較する方法を指定する方法として、クラスの GetHash() を定義する必要があります。
Pythonはこれをどのように知っていますか? ありがとう