2

我有一个这样的链接和书签模型:

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 是如何知道这一点的?谢谢

4

1 回答 1

5

我想您是在问“Django 如何在过滤时比较实例”,而不是“python 如何比较对象”。

使用以下代码行,

bookmark, created = Bookmark.objects.get_or_create(user=request.user, link=link)

Django 正在过滤链接对象的主键。__unicode__方法无所谓。

有关更多信息,请参阅 Django 文档以比较对象对相关对象的查询

于 2012-05-22T12:20:05.460 回答