You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django开发如何将Location表记录与指定用户关联避免所有用户可见

解决方案

你需要分别修改模型层、视图层代码,一共3个核心修改点:

1. 修改Location模型,新增用户关联字段

首先给地址表加外键关联Django自带的User表,实现地址和用户的绑定:

class Location(models.Model):
    # 新增字段,关联对应用户
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="locations", null=True)
    city = models.CharField(max_length=50, choices=cy.city, blank=True)
    street = models.CharField(max_length=100, blank=True)
    home_number = models.CharField(max_length=100, blank=True)

    def __str__(self):
        # 顺便修正你原来重复写city的问题
        return f"{self.city} {self.street} {self.home_number}"

修改完后执行数据库迁移命令:
python manage.py makemigrations
python manage.py migrate

2. 修正添加地址视图的保存逻辑

你原来的form_valid逻辑完全错误,应该给新增的Location实例的user字段赋值当前登录用户,同时添加登录限制避免匿名用户报错:

from django.contrib.auth.mixins import LoginRequiredMixin

class AddLocationView(LoginRequiredMixin, CreateView):
    model = Location
    form_class = AddLocationForm
    template_name ='add_location.html'
    success_url = reverse_lazy("add-item")

    def form_valid(self, form):
        # 给地址绑定当前登录用户
        form.instance.user = self.request.user
        return super().form_valid(form)

3. 修改添加商品视图,过滤仅显示当前用户的地址

重写表单获取逻辑,把地址下拉框的可选范围限制为当前用户自己添加的地址:

from django.contrib.auth.mixins import LoginRequiredMixin

class AddItemView(LoginRequiredMixin, CreateView):
    model = Add_Item
    form_class = AddItemForm
    template_name ='add_item.html'

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        # 过滤地址选项,仅显示当前用户的地址
        form.fields['location'].queryset = Location.objects.filter(user=self.request.user)
        return form
    
    # 补充商品绑定当前用户的逻辑,你原来的代码未实现该逻辑
    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

修改完成后即可实现:用户新增的地址仅和自己绑定,添加商品时只能看到自己保存的地址。

内容的提问来源于stack exchange,提问作者user16375265

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:18:04