我有一个像这样的链接和书签模型:
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)
现在在视图中,我看到是否已存在具有给定网址的链接。 然后使用用户名将此对象传递给Bookmarks集合,以查看是否已存在包含此用户名的书签且链接实例已存在。
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如何知道这一点? 感谢
答案 0 :(得分:5)
我认为你在问“Django在过滤时如何比较实例”,而不是“python如何比较对象”。
使用以下代码行
bookmark, created = Bookmark.objects.get_or_create(user=request.user, link=link)
Django正在过滤链接对象的主键。 __unicode__
方法并不重要。
有关详情,请参阅comparing objects和queries over related objects的Django文档。