【问题标题】:How can i add multiple address in django? [closed]如何在 django 中添加多个地址? [关闭]
【发布时间】:2021-09-09 14:14:30
【问题描述】:

我正在尝试添加多个地址,但只创建了 1 个地址

这是models.py

class Customer(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
name = models.CharField(max_length = 100)
locality = models.CharField(max_length = 200)
city = models.CharField(max_length = 50)
zipcode = models.IntegerField()
state = models.CharField(choices = STATE_CHOICES, max_length=50)

这是views.py

def address(request):
add = Customer.objects.filter(user=request.user)
return render(request, 'app/address.html', {'add':add})

这是地址.py

{% for ad in add %}
<div class="col-sm-6">
 <div class="card">
  <div class="card-body">
   <h3>Address {{forloop.counter}}</h3>
   <p>Name: {{ad.name}}</p>
   <p>Locality: {{ad.locality}}</p>
   <p>City: {{ad.city}}</p>
   <p>Pin Code: {{ad.zipcode}}</p>
   <p>State: {{ad.state}}</p>
  </div>
 </div>
</div>
{% endfor %}

这是 admin.py

@admin.register(Customer)
class CustomerModelAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'user', 'locality', 'city',
'zipcode', 'state'] 

@admin.register(Address)
class AddressModelAdmin(admin.ModelAdmin):
list_display = ['id', 'user', 'name', 'locality',
'city', 'state', 'zipcode']
            

【问题讨论】:

  • 添加多个地址的视图在哪里?
  • 兄弟,我正在关注一个教程,没有针对多个地址的此类代码,我仍然为他工作。我应该分享那个教程的链接吗?

标签: python html django twitter-bootstrap backend


【解决方案1】:

你的意思是一个用户可以有很多地址吗?该模型显示每个用户的地址 在这种情况下,您应该添加新的模型地址才能继续。这里有一个例子: models.py文件

class Customer(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    name = models.CharField(max_length = 100)

class Address(models.Model):
    user = models.ForeignKey(
        "Customer", on_delete=models.CASCADE, verbose_name="customer"
    )
    locality = models.CharField(max_length = 200)
    city = models.CharField(max_length = 50)
    zipcode = models.IntegerField()
    state = models.CharField(choices = STATE_CHOICES, max_length=50)

views.py

def addresses(request):
    addresses = Address.objects.filter(user=request.user)
    return render(request, 'app/address.html', {'addresses':addresses})

address.html

{% if addresses %}
    {% for ad in addresses %}
        <div class="col-sm-6">
            <div class="card">
                <div class="card-body">
                    <h3>Address {{forloop.counter}}</h3>
                    <p>Name: {{ad.user.name}}</p>
                    <p>Locality: {{ad.locality}}</p>
                    <p>City: {{ad.city}}</p>
                    <p>Pin Code: {{ad.zipcode}}</p>
                    <p>State: {{ad.state}}</p>
                </div>
            </div>
        </div>
    {% endfor %}
{% endif %}

文件admin.py

@admin.register(Customer)
class CustomerModelAdmin(admin.ModelAdmin):
    model = Customer
    list_display = ['id', 'name'] 

@admin.register(Address)
class AddressModelAdmin(admin.ModelAdmin):
    model = Address
    list_display = ['id', 'user', 'locality', 'city', 'state', 'zipcode']

注意:您应该在 list_display 中呈现模型中的可用字段

此代码未经测试,请先测试

【讨论】:

  • 这是抛出此错误:ValueError at /address/ 无法查询“admin”:必须是“Customer”实例。我在这个问题中添加了 admin.py,所以也看看它
  • 我更新了答案,请阅读有关 list_display 的文档docs.djangoproject.com/en/3.2/ref/contrib/admin/… 你最好的教程是文档
  • @PiyushDive 是否回答了您的问题?如果是,请采纳答案,谢谢
  • 它仍然显示此错误:ValueError at /address/ 无法查询“admin”:必须是“Customer”实例。
  • 你在你的modeladmin中指定了模型吗?为什么你直到现在才报告你的错误?一开始的问题不是关于modeladmin,而是关于你的观点......我的回答是否解决了你的观点错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2016-12-23
相关资源
最近更新 更多