0

我有一个具有不同属性的人物模型。一个人有一个地址,它是个人/父模型的 OneToOneField。当我在添加/编辑人员时使用管理表单时,我还需要编辑地址属性,如 line1、line2、mobile 等。同样,我想从管理页面中删除一些人,它也应该删除匹配的引用,如地址。我已经尝试了很多东西,包括 Inline 等等。但是,我认为只有当地址与人有外键时,内联才能起作用,反向是不可能的。对此的任何帮助将不胜感激......

class Person(models.Model):
    person_Id = models.CharField(max_length=32L, primary_key=True, db_column='PERSON_ID', editable=False)
    business_Address = models.OneToOneField(Address, unique=True, db_column='BUSINESS_ADDRESS_ID')

    class Meta:
        db_table = 'PD_PERSON' 

class Address(models.Model):
    # Field names made lowercase.
    address_id = models.IntegerField(primary_key=True, db_column='ADDRESS_ID')
    address_name = models.CharField(max_length=256L, db_column='NAME', blank=True)
    line1 = models.CharField(max_length=128L, db_column='LINE1', blank=True)
     class Meta:
        db_table = 'PD_ADDRESS' 

在 admin.py ~

class PersonInline(admin.TabularInline):
    model = Person

class PersonAdmin(admin.ModelAdmin):
    list_display = ('customer_Id', 'complete_Name', 'company')
    search_fields = ('name', 'customer_Id', 'email_Id')

class AddressAdmin(admin.ModelAdmin):
    inlines = [ PersonInline, ]

admin.site.register(Address, AddressAdmin)
#admin.site.register(Category)
#admin.site.register(Languages)
admin.site.register(Person, PersonAdmin)
4

1 回答 1

0

问题1:删除人员删除地址

一旦您的人被删除,您可以使用 post_delete 信号自动删除地址。使用起来非常简单

from django.db.models.signals import post_delete
from web.programing.roxx.models import Person, Adress

@receiver(post_delete, sender=Person, dispatch_uid="person_post_delete")
def onPersonDelete(sender, instance, using, **kwargs):
    # be carefull, the instance doesn't exist anymore in the database
    adress_id = instance.business_Address.id
    if id != None:
        Adress.objects.filter(id=adress_id).delete()

但这不会在“你确定吗?”中显示地址。信息..


问题2:在个人管理页面编辑地址

目前,我没有看到比构建自定义表单来编辑 Person 模型更简单的解决方案,并覆盖 add_view() 和 change_view() 方法以使用 O2O 键初始化此表单。

于 2013-07-29T16:40:37.460 回答