即使使用OneToOneField(用户),也链接到多个用户的单个地址



所以我遇到的问题是,当我为用户添加一个地址时,该地址也链接到所有其他用户。我也可以在我的管理界面中看到这一点。

然后,即使我登录一个用户,编辑地址,我的第二个用户的地址也会更改。

对我的问题所在的任何线索/提示都非常感谢。谢谢!

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)

将检索用户的地址。它假设用户确实有一个地址,如果他没有地址,它将失败。

最新更新