即使使用 OneToOneField(用户),单个地址也链接到多个用户
Single Address Linked to Multiple Users Even when Using OneToOneField(User)
所以我遇到的问题是,当我为用户添加地址时,该地址也链接到所有其他用户。我也可以在我的管理界面中看到这个。
然后即使我以一个用户身份登录,编辑地址,我的第二个用户的地址也会更改。
任何 clues/hints 我的问题所在都非常感谢。谢谢!
models.py
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
# Create your models here.
class UserAddress(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=120)
address2 = models.CharField(max_length=120, null=True, blank=True)
city = models.CharField(max_length=120)
state = models.CharField(max_length=120)
country = models.CharField(max_length=120)
zipcode = models.CharField(max_length=25)
phone = models.CharField(max_length=120)
shipping = models.BooleanField(default=True)
billing = models.BooleanField(default=False)
def __str__(self):
return self.get_address()
def get_address(self):
return "%s, %s, %s, %s, %s" %(self.address, self.city, self.state, self.country, self.zipcode)
views.py
def edit_address(request):
user = request.user
address = UserAddress.objects.get(user=user)
form = UserAddressForm(request.POST or None, instance=address)
if request.method == 'POST':
if form.is_valid():
user_address = form.save(commit=False)
user_address.user = request.user
user_address.save()
return HttpResponseRedirect('%s'%(reverse('address')))
context = {
"form": form
}
return render(request, "edit_address.html", context)
def add_address(request):
form = UserAddressForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
user_address = form.save(commit=False)
user_address.user = request.user
user_address.save()
return HttpResponseRedirect('%s'%(reverse('address')))
context = {
"form": form
}
return render(request, "add_address.html", context)
问题出在那一行:
address = UserAddress.objects.get()
正如您在尝试检索地址时没有指定查询参数一样,Django 检索您在数据库中拥有的唯一地址(如果您有多个地址或没有地址,它将失败)。所以你总是在编辑同一个对象。
我猜你想做的是:
address = UserAddress.objects.get(user=user)
这将检索用户的地址。
假设用户确实有一个地址,如果他没有,它将失败。
所以我遇到的问题是,当我为用户添加地址时,该地址也链接到所有其他用户。我也可以在我的管理界面中看到这个。
然后即使我以一个用户身份登录,编辑地址,我的第二个用户的地址也会更改。
任何 clues/hints 我的问题所在都非常感谢。谢谢!
models.py
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
# Create your models here.
class UserAddress(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=120)
address2 = models.CharField(max_length=120, null=True, blank=True)
city = models.CharField(max_length=120)
state = models.CharField(max_length=120)
country = models.CharField(max_length=120)
zipcode = models.CharField(max_length=25)
phone = models.CharField(max_length=120)
shipping = models.BooleanField(default=True)
billing = models.BooleanField(default=False)
def __str__(self):
return self.get_address()
def get_address(self):
return "%s, %s, %s, %s, %s" %(self.address, self.city, self.state, self.country, self.zipcode)
views.py
def edit_address(request):
user = request.user
address = UserAddress.objects.get(user=user)
form = UserAddressForm(request.POST or None, instance=address)
if request.method == 'POST':
if form.is_valid():
user_address = form.save(commit=False)
user_address.user = request.user
user_address.save()
return HttpResponseRedirect('%s'%(reverse('address')))
context = {
"form": form
}
return render(request, "edit_address.html", context)
def add_address(request):
form = UserAddressForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
user_address = form.save(commit=False)
user_address.user = request.user
user_address.save()
return HttpResponseRedirect('%s'%(reverse('address')))
context = {
"form": form
}
return render(request, "add_address.html", context)
问题出在那一行:
address = UserAddress.objects.get()
正如您在尝试检索地址时没有指定查询参数一样,Django 检索您在数据库中拥有的唯一地址(如果您有多个地址或没有地址,它将失败)。所以你总是在编辑同一个对象。
我猜你想做的是:
address = UserAddress.objects.get(user=user)
这将检索用户的地址。 假设用户确实有一个地址,如果他没有,它将失败。