所以我遇到的问题是,当我为用户添加一个地址时,该地址也链接到所有其他用户。我也可以在我的管理界面中看到这一点。
然后,即使我登录一个用户,编辑地址,我的第二个用户的地址也会更改。
对我的问题所在的任何线索/提示都非常感谢。谢谢!
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)
将检索用户的地址。它假设用户确实有一个地址,如果他没有地址,它将失败。