python - Django 如何比较对象?

标签 python django pydev

我有一个链接和一个书签模型,如下所示:

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)

现在,在 View 中,我可以查看具有给定 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 如何知道这一点? 谢谢

最佳答案

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

使用以下代码行,

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

Django 正在过滤链接对象的主键。 __unicode__ 方法并不重要。

请参阅 Django 文档 comparing objectsqueries over related objects了解更多信息。

关于python - Django 如何比较对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10701834/

相关文章:

python - 如何使用 urllib3 在 Python 上发出 Post 请求?

python - 使用 django 上传文件时如何创建一些年/月/日路径

python - pydev 与 unicode 的奇怪行为

python - sh : Rscript: command not found

在 git 存储库中编辑大型项目时,Eclipse 会定期卡住

python - 如何使用 FFmpeg 从视频中剪切/删除特定的未解码 h.264(关键)帧?

python - 如何从另一个模块的对象中更改模块变量的值?

django - 如何在 Django 中执行 DB 按位查询?

django - 如何使用 DJango Rest Framework 上传多个图像?

python - django-sendgrid-v5 一切似乎都正常,但邮件没有送达