Django 返回具有相同名称的多个对象

Django 返回具有相同名称的多个对象,django,django-models,django-views,Django,Django Models,Django Views,在/user/(对象名称)处返回多个对象/ 异常类型:MultipleObject返回 请求方法:获取 异常值:get()返回了多个画布--它返回了2 异常位置:get第389行中的C:\Users\user\AppData\Local\Programs\Python35-32\lib\site packages\django\db\models\query.py 具有相同名称的多个对象,但用户只能有一个唯一的对象名称 每当我创建另一个同名对象时,就会出现此错误(MultipleObject返回

在/user/(对象名称)处返回多个对象/ 异常类型:MultipleObject返回

请求方法:获取

异常值:get()返回了多个画布--它返回了2

异常位置:get第389行中的C:\Users\user\AppData\Local\Programs\Python35-32\lib\site packages\django\db\models\query.py

具有相同名称的多个对象,但用户只能有一个唯一的对象名称

每当我创建另一个同名对象时,就会出现此错误(MultipleObject返回)。我想允许每个用户创建一个唯一的对象名

例如:user1可以具有唯一的对象名(test),user2也可以具有唯一的对象名(test)

看法


在模型字段上设置
unique=True
,在模型字段上设置
object\u name

在查询中需要使用用户

object = get_object_or_404(Object, user=user, slug__iexact=slug)

您需要在查询中使用用户

object = get_object_or_404(Object, user=user, slug__iexact=slug)

get_object_或_404函数返回满足指定条件的对象,我要记住的是,只有一个对象具有指定条件。 它不会返回列表或类似的内容。如果找到多个对象,则返回所谓的错误

您需要将
user
传递到参数中

object_name = get_object_or_404(Object, user=user, slug__iexact=slug)
或者您可以在模型中为用户字段定义相关的名称约束

user = models.ForeignKey(User, related_name="my_objects")
然后,您可以直接从用户对象获取

user = User.objects.get(username=username)
object_name = user.my_objects.get(slug__iexact=slug)

此外,严格来说,不建议使用python默认关键字来命名变量。“object”是一个有效的python关键字。这不是一个好的做法。

get\u object\u或\u 404函数返回满足指定条件的对象,我要记住的是,只有一个对象具有指定条件。 它不会返回列表或类似的内容。如果找到多个对象,则返回所谓的错误

您需要将
user
传递到参数中

object_name = get_object_or_404(Object, user=user, slug__iexact=slug)
或者您可以在模型中为用户字段定义相关的名称约束

user = models.ForeignKey(User, related_name="my_objects")
然后,您可以直接从用户对象获取

user = User.objects.get(username=username)
object_name = user.my_objects.get(slug__iexact=slug)

此外,严格来说,不建议使用python默认关键字来命名变量。“object”是一个有效的python关键字。这不是一个好的做法。

但是如果我将其设置为unique,那么它将不允许我有多个同名对象。这不起作用,因为“user1可以有一个唯一的对象名(test),user2也可以有一个唯一的对象名(test)。”他可以一起使用
unique_=((“user”,“object_name”),)
。请参阅,但如果我将其设置为“唯一”,则它将不允许我拥有多个同名对象。这不起作用,因为“user1可以拥有唯一的对象名(test),user2也可以拥有唯一的对象名(test)。”他可以使用
unique\u-together=(“user”,“object\u-name”),
。查看如何通过用户获取对象。我是否需要用户user.object\u set.all(),然后进行筛选?是的,您可以执行
user.object\u set.get(slug\uu iexact=slug)
,但是您必须捕获ObjectNotFound异常并引发404。我如何通过用户获取对象。我是否需要user.object\u set.all(),然后进行筛选?是的,您可以执行
user.object\u set.get(slug\uu iexact=slug)
,但随后您必须捕获ObjectNotFound异常并引发404。