get()返回了多个Member--它返回了11个



我是一名学习Django的学生。我正在实施,以便可以在我的页面上编辑成员信息。但我遇到了以下错误:我希望所有成员都能在我的页面上编辑他们的信息。我希望能够分别在Model表中获得姓名、用户名和电话信息。我知道views.py中的get((部分是问题所在,但由于这个解决方案,它看起来很疯狂。我该如何解决这个问题?如有任何帮助,我们将不胜感激。

错误详细信息:

MultipleObjectsReturned at /mypage/mypage_modify/
get() returned more than one Member -- it returned 11!
Request Method: POST
Request URL:    http://127.0.0.1:8000/mypage/mypage_modify/
Django Version: 3.1.5
Exception Type: MultipleObjectsReturned
Exception Value:    
get() returned more than one Member -- it returned 11!
Exception Location: D:anaconda3envsvnv_znlibsite-packagesdjangodbmodelsquery.py, line 436, in get
Python Executable:  D:anaconda3envsvnv_znpython.exe
Python Version: 3.7.6
Python Path:    
['C:\zeronine_project',
'D:\anaconda3\envs\vnv_zn\python37.zip',
'D:\anaconda3\envs\vnv_zn\DLLs',
'D:\anaconda3\envs\vnv_zn\lib',
'D:\anaconda3\envs\vnv_zn',
'D:\anaconda3\envs\vnv_zn\lib\site-packages']
Server time:    Thu, 08 Jul 2021 23:33:38 +0900

View.py

from django.http import HttpResponseRedirect
from django.shortcuts import render, redirect
from mypage.forms import *
from zeronine.models import *
# Create your views here.
def mypage_list(request):
categories = Category.objects.all()
return render(request, 'mypage/mypage_list.html', {'categories':categories})
def mypage_modify(request):
current_category = None
categories = Category.objects.all()
member = Member.objects.get()
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse('zeronine:login'))
if request.method == "POST":
member.name = request.POST['name']
member.password = request.POST['password']
member.username = request.user
member.save()
return redirect('zeronine:mypage_list')
else:
memberForm = MemberForm
return render(request, 'mypage/mypage_modify.html', {'memberForm':memberForm, 'member':member, 'current_category': current_category, 'categories': categories})

型号.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.urls import reverse
# 회원
class Member(AbstractUser):
username = models.CharField(primary_key=True, max_length=20, verbose_name='아이디')
name = models.CharField(max_length=20, verbose_name='이름', default='')
password = models.CharField(max_length=64, verbose_name='비밀번호')
phone = models.CharField(max_length=64, verbose_name='전화번호')
def __str__(self):
return self.username
class Meta:
verbose_name = ('Member')
verbose_name_plural = ('Members')
# 카테고리
class Category(models.Model):
category_code = models.AutoField(primary_key=True)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True, allow_unicode=True)
class Meta:
ordering =['category_code']
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('zeronine:product_in_category', args=[self.slug])
# 상품
class Product(models.Model):
product_code = models.AutoField(primary_key=True)
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
category_code = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, related_name='products')
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True, unique=False, allow_unicode=True)
image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True)
benefit = models.TextField()
detail = models.TextField()
target_price = models.IntegerField()
start_date = models.DateField()
due_date = models.DateField()
class Meta:
ordering = ['product_code']
index_together = [['product_code', 'slug']]
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('zeronine:product_detail', args=[self.product_code, self.slug])

class Post(models.Model):
post_code = models.AutoField(primary_key=True)
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
title = models.CharField(max_length=64)
content = models.TextField()
register_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
class Meta:
ordering = ['register_date']
# 댓글(댓글코드, 게시글코드(fk), 아이디(fk), 내용, 등록날짜)
class Comment(models.Model):
comment_code = models.AutoField(primary_key=True)
post_code = models.ForeignKey(Post, on_delete=models.CASCADE, db_column='post_code')
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
content = models.TextField()
register_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.content
class Meta:
ordering = ['register_date']
# Zzim 모델부터 새로 추가하려는 모델들 입니다.
# 찜하기(찜코드, 아이디(fk), 상품코드(fk))
class Zzim(models.Model):
zzim_code = models.AutoField(primary_key=True)
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
def __str__(self):
return str(self.zzim_code)
# 상품이미지(이미지코드, 상품코드(fk), 이미지경로)
class Photo(models.Model):
photo_code = models.AutoField(primary_key=True)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
photo = models.ImageField(upload_to="photos/%Y%m%d")
def __str__(self):
return str(self.photo_code)
class Meta:
ordering = ['photo_code']

# 옵션(옵션코드, 옵션명, 상품코드(fk))
class Option(models.Model):
option_code = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
def __str__(self):
return self.name
# 옵션값(옵션값코드, 옵션값명, 옵션코드(fk), 상품코드(fk))
class Value(models.Model):
value_code = models.AutoField(primary_key=True)
option_code = models.ForeignKey(Option, on_delete=models.CASCADE, db_column='option_code')
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
name = models.CharField(max_length=32)
def __str__(self):
return self.name
# 옵션지정상품(옵션지정상품코드, 상품코드(fk), 가격, 참여수량)
class Designated(models.Model):
designated_code = models.AutoField(primary_key=True)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
price = models.IntegerField()
rep_price = models.BooleanField(default=True)
class Meta:
ordering = ['designated_code']
def __str__(self):
return str(self.designated_code)
# 상품옵션구성(상품옵션구성코드, 옵션지정상품코드, 옵션값코드)
class Element(models.Model):
element_code = models.AutoField(primary_key=True)
designated_code = models.ForeignKey(Designated, on_delete=models.CASCADE, db_column='designated_code')
value_code = models.ForeignKey(Value, on_delete=models.CASCADE, db_column='value_code')
class Meta:
ordering = ['element_code']
def __str__(self):
return str(self.element_code)
# 참여(참여코드, 아이디(fk), 상품코드(fk), 수량)
class Join(models.Model):
join_code = models.AutoField(primary_key=True)
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
part_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.join_code)
class Meta:
ordering = ['join_code']
#참여상세(참여상세코드, 수량, 가격, 참여코드, 옵션지정상품코드)
class JoinDetail(models.Model):
joindetail_code = models.AutoField(primary_key=True)
join_code = models.ForeignKey(Join, on_delete=models.CASCADE, db_column='join_code')
designated_code = models.ForeignKey(Designated, on_delete=models.CASCADE, null=True, blank=True, db_column='designated_code')
quantity = models.IntegerField()
price = models.IntegerField()
def __str__(self):
return str(self.joindetail_code)
class Meta:
ordering = ['joindetail_code']

mypage_list.html

{% extends 'base.html' %}
{% block title %} 마이페이지 {% endblock %}
{% block content %}
<style>
vr {
display: block;
width:2px;
height: 630px;
background-color:darkgrey;
position:absolute;
top:330px;
bottom:0;
left:750px;
opacity: 0.2;
}
</style>
<body>
{% load static %}
<link rel="stylesheet" href="{% static 'main.css' %}">
<div class="container">
<h3 style="margin-top:50px;"><b><p style="color: #949E79; display: inline; clear:none;">{{ user.username }}</p>님의 마이페이지</b></h3>
<!--        <hr style="width: 40%; float: left"><br>-->
<h5 style="margin-top:40px; margin-bottom: 30px; color: #848484; clear: none;">내 정보</h5>
</div>

<div id="username" style="margin-left: 15px; margin-top: 20px;">
<strong style="color: #848484; margin-bottom: 10px;">이름</strong><br>
<input style="color:#585858; margin-top: 8px; width: 350px; height: 45px; padding: 10px;" type="text" value="{{ user.name }}" name="name">
</div>
<div id="userid" style="margin-left: 15px; margin-top: 20px;">
<strong style="color: #848484; margin-bottom: 10px;">아이디</strong><br>
<input style="color:#585858; margin-top: 8px; width: 350px; height: 45px; padding: 10px;" type="text" value="{{ user.username }}" name="username">
</div>
<div id="userpw" style="margin-left: 15px; margin-top: 20px;">
<strong style="color: #848484; margin-bottom: 10px;">비밀번호</strong><br>
<input style="color:#585858; margin-top: 8px; width: 350px; height: 45px; padding: 10px;" type="text" value="{{ user.password }}" name="password">
</div>
<div id="userphone" style="margin-left: 15px; margin-top: 20px;">
<strong style="color: #848484; margin-bottom: 10px;">전화번호</strong><br>
<input style="color:#585858; margin-top: 8px; width: 350px; height: 45px; padding: 10px;" type="text" value="{{ user.phone }}" name="userphone">
</div>
<div id="useremail" style="margin-left: 15px; margin-top: 20px; margin-bottom: 30px;">
<strong style="color: #848484; margin-bottom: 10px;">이메일</strong><br>
<input style="color:#585858; margin-top: 8px; width: 350px; height: 45px; padding: 10px;" type="text" value="{{ user.email }}" name="useremail">
</div>
<span style="margin-left: 15px;"><a href=""><b style="color: grey">비밀번호 변경하기</b></a></span>&nbsp;&nbsp;&nbsp;
<span><a href=""><b style="color: grey">탈퇴하기</b></a></span><br>
<a href="{% url 'zeronine:mypage_modify' %}"><button type="submit" style="margin-top:20px; margin-left:15px; background: #637B46; border-color: #637B46; border-radius: 0px; text-align: center; width: 170px; height:55px;" class="btn btn-primary"><b>변경 사항 수정하기</b></button></a>
<vr />
</body>
{% endblock %}

mypage_modify.html

{% extends "base.html" %}
{% block content %}
<div class="card container my-3 justify-content-center" style="border: white">
<h3 style="margin-top:20px; margin-bottom: 30px;"><b>마이페이지 수정</b></h3>
<form method="POST">
{% csrf_token %}
<div class="card-header">
<strong>이름 : &nbsp;</strong>
<input type="text" value="{{ user.name }}" name="name">
</div>
<div class="card-body">
<div>
<strong>아이디 : &nbsp;</strong>
<input type="text" value="{{ user.username }}" name="username">
</div><hr>
<strong>비밀번호 : &nbsp;</strong>
<input type="text" value="{{ user.password }}" name="password">
</div>
<div class="card-body2">
<div>
<strong>전화번호 : &nbsp;</strong>
<input type="text" value="{{ user.phone }}" name="username">
</div><hr>
</div>
<input class="btn btn-dark" type="submit" style="background-color: #637B46; border: white; float: right" value="수정"></form>
<div><a href="{% url 'zeronine:mypage_list' %}"><button style="background: #848484; border: white; float: right; margin-top:-36px; margin-right: 65px;" class="btn btn-danger">이전</button></a></div>
</form>
</div>
{% endblock %}

问题是您没有向object.get传递任何内容,因此它不知道返回哪个对象。

你可以试试这样的东西:

member = Member.objects.get(id=request.user.id) # for the request user 
member = Member.objects.get(id=1) # for the id one 

或者任何你想用来只获得一个成员的东西

最新更新