如何从 django admin 添加多个客户地址

Posted

技术标签:

【中文标题】如何从 django admin 添加多个客户地址【英文标题】:how to add multiple customer address from django admin 【发布时间】:2018-02-25 15:15:28 【问题描述】:

好的,新手来了。所以我正在做一个项目,要求是:我必须制作一个客户模型,管理员/员工可以在其中添加客户的详细信息。 现在的问题是管理员/员工可以针对客户添加多个地址。我找不到任何合适的想法,我该怎么做。 但我还是制定了计划..

我添加了一些代码。

客户模型.py

from __future__ import unicode_literals
from django.contrib.postgres.fields import JSONField
from decimal import Decimal
from django.db import models
from django.utils.safestring import mark_safe

# Create your models here.
class customer(models.Model):
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    profile_image = models.FileField()
    phone_number = models.BigIntegerField()

    def profile(self):
        if self.profile_image!="":
            return mark_safe('<img src="/media/%s"   />' % (self.profile_image))
        else:
            return "";
    profile.short_description = 'Image'
    # profile.allow_tags = True

Customer_address-models.py

from __future__ import unicode_literals
from customer.models import customer
from django.db import models

# Create your models here.
class Address(models.Model):
    customer = models.ForeignKey(customer,default=0)
    country = models.CharField(max_length=150)
    state = models.CharField(max_length=150)
    city =models.CharField(max_length=150)
    pin_code =  models.BigIntegerField()

    # def customer_address(self):
    #   return fields = ["country","state","city","pin_code"]

客户 - admin.py

from __future__ import unicode_literals
from .models import customer
from customer_address.models import Address
from django.contrib import admin

# Register your models here.
class CustomerAddressInline(admin.StackedInline):
    model = Address

class CustomerAdmin(admin.ModelAdmin):
    list_display = ["first_name","last_name","phone_number","profile"]
    list_select_related = True
    inlines = [
        CustomerAddressInline,
    ]

    search_fields = ["first_name","last_name","phone_number"]
    fields = ( "first_name","last_name","phone_number",'profile',"profile_image","customer_address" )
    readonly_fields = ('profile',)
    class Meta:
        model = customer

admin.site.register(customer,CustomerAdmin)

想不通,我如何在管理员的客户模块中显示/编辑/插入所有字段作为地址。非常感谢您提供一点帮助 谢谢 P.S:我正在使用 django-1.11.10

【问题讨论】:

【参考方案1】:

这里有几处问题。

模型名称的标题是Customer,而不是customer

不知道您为什么要为customercustomer_address 使用两个应用程序

图像字段profile_image 应使用ImageField,因为它具有图像验证逻辑。

建议不要在模型上使用返回图像标记的方法,它应该在模板中。

类似&lt;img src=" MEDIA_URL image.imgfile.name "&gt;&lt;/img&gt;

将导入放在这些组中:futurestandard librarythird-party libraries、其他 Django 组件、local Django componenttry/excepts

看看django coding style

使用默认值的外键,您应该确保在迁移之前创建对象。看一眼 Setting default value for Foreign Key attribute

from __future__ import unicode_literals

from django.contrib import admin

from .models import Customer, Address

class CustomerAddressInline(admin.StackedInline):
    model = Address

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    list_display = ["first_name","last_name","phone_number"]
    inlines = [CustomerAddressInline]

    search_fields = ["first_name","last_name","phone_number"]
    fields = ("first_name","last_name","phone_number", "profile_image",)

同时澄清您的问题。

【讨论】:

我承认其他问题.. 我之前说过。我必须从管理员视图中添加多个地址选项。地址有 4 个字段,国家、州、城市、密码。当管理员/员工单击添加更多地址时,将显示一个新的 div,其中包含所有地址字段客户资料。请忽略所有其他问题。请帮助我,我该如何管理它们,如果我计划错了.. 如果没有,我该怎么做。

以上是关于如何从 django admin 添加多个客户地址的主要内容,如果未能解决你的问题,请参考以下文章

Django-admin按多个字段排序

如何在 django admin 中显示多个模型的更改列表?

如何使用django管理员多对多个字段选择器小部件

django admin中的外键表单字段

Django admin,如何在 django 模板中正确检查用户的权限?

Django通过pycharm创建后,如何登录admin后台?