Django自动将值分配给\u save in admin上的模型字段

Django自动将值分配给\u save in admin上的模型字段,django,django-models,django-admin,Django,Django Models,Django Admin,我又有点迷路了。我是这方面的初学者。 我有两种型号: class Person(models.Model): name = models.CharField(max_length=200, default="Name") phone = models.CharField(max_length=12, default="+22123456789") ... class Adress(models.Model): person = models.ForeignKey

我又有点迷路了。我是这方面的初学者。 我有两种型号:

class Person(models.Model):
    name = models.CharField(max_length=200, default="Name")
    phone = models.CharField(max_length=12, default="+22123456789")
    ...

class Adress(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    city = models.CharField(max_lenght=200, default="City")
    ...
在我的admin.py中,我内联编辑它们,这样在一个表单上我就可以拥有所有的个人数据和他的几个地址。这很重要。我确实需要有一个人与1-3个地址的关系

from django.contrib import admin
from .models import Adress
from .models import Person

class AdressInline(admin.TabularInline):
    model = Adress

class PersonAdmin(admin.ModelAdmin):
    inlines = [
        AdressInline    
    ]

admin.site.register(Person, PersonAdmin)
现在。。。问题是无法创建包含两个模型中的字段的列表显示。据我所知,列表显示是平面的,并且没有地方可以在上面放置同一字段的3个值。我想要一个如下所示的列表:

list_display = ('name', 'phone', 'city')
所以。。。我的想法是在ModelPerson中创建一个名为“maincity”的额外字段,该字段不可由用户编辑,但将根据Address模型中的值自动填充。在我们保存表单之后。我在以下方面发现了类似的情况:

如何告诉django将address.city分配给Person.maincity*


*你可能会笑,我只是在学习

保存个人和地址模型中的城市值将导致数据重复。在设计模型或表时,我们必须避免数据重复

我们可以在AddressAdminlist\u display本身中显示Person和Address模型的值

在AddressAdmin类中定义方法
nick\u name
,参数为
self和obj
。通过obj参数,我们可以获得外键字段的值,并将方法名称粘贴到列表显示中

#models.py
class Person(models.Model):
    name = models.CharField(max_length=200)
    nick_name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Address(models.Model):
    name = models.ForeignKey(Person)
    city = models.CharField(max_length=200)

    def __str__(self):
        return self.name

#admin.py

class AddressAdmin(admin.ModelAdmin):
    list_display = ('nick_name', 'city')

    def nick_name(self, obj):
        return obj.name.nick_name

def save_model(self、request、obj、form、change):
这是用于
AddressAdmin
还是
PersonAdmin
否,这是Django文档中的简单示例。但是我必须将它用于
PersonalAdmin
。如果一个人有多个地址,您将在person.maincity中保存哪个地址“city”?还是同一个人的多个地址的城市总是一样的?好问题。。。。不知道:(最后一个?我比我想的更困了。这是你的项目要求决定的。这对AddressAdmin有效。但对PersonalAdmin无效,对吗?我必须尝试一下,但是内联会如何表现呢?我可以用AddressAdmin列表获得相同的表单吗?我猜不是。好吧,有点作弊,我可以让它工作“我的方式”:)谢谢。
#models.py
class Person(models.Model):
    name = models.CharField(max_length=200)
    nick_name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Address(models.Model):
    name = models.ForeignKey(Person)
    city = models.CharField(max_length=200)

    def __str__(self):
        return self.name

#admin.py

class AddressAdmin(admin.ModelAdmin):
    list_display = ('nick_name', 'city')

    def nick_name(self, obj):
        return obj.name.nick_name