MultipleObjectsReturned at / user /(对象名称)/ 异常类型:MultipleObjectsReturned
请求方法:GET
异常值:get()返回多个Canvas - 它返回2!
异常位置:C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ django \ db \ models \ query.py in get,line 389
具有相同名称的多个对象,但用户只能拥有一个唯一的对象名称。
每当我创建另一个具有相同名称的对象时,我都会收到此错误(MultipleObjectsReturned)。我想允许每个用户创建一个唯一的对象名称。
例如:user1可以具有唯一的对象名称(test),而user2也可以具有唯一的对象名称(test)。
class Object(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
object_name = models.CharField(
max_length=100,
validators=[
# validate_canvas_title,
RegexValidator(
regex=CANVAS_REGEX,
message='Canvas must only contain Alpahnumeric characters',
code='invalid_canvas_title'
)],
)
slug = models.SlugField(max_length=100, blank=True)
class Meta:
unique_together = ['user', 'object_name']
视图
def canvasView(request, username=None, slug=None):
user = User.objects.get(username__iexact=username)
object = get_object_or_404(Object, slug__iexact=slug)
template = "pages/object.html"
context = {
'user' : user,
'object': object,
}
return render(request, template, context)
答案 0 :(得分:1)
您需要在查询中使用该用户。
object = get_object_or_404(Object, user=user, slug__iexact=slug)
答案 1 :(得分:1)
get_object_or_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关键字。这不是一个好习惯。
答案 2 :(得分:0)
在模型字段unique=True
上设置object_name
。