Skip to main content
 首页 » 编程设计

python之带有外键字段的 Django CreateView

2024年08月19日29mayingbao

我想给一个人添加一个电话号码。

我的 models.py 包含:

class Person(models.Model): 
    first_name = models.CharField(max_length=64) 
    last_name = models.CharField(max_length=64) 
    description = models.CharField(max_length=64) 
 
class Phone(models.Model): 
    CHOICES = ( 
        ('P', 'personal'), 
        ('C', 'company') 
    ) 
    person = models.ForeignKey(Person) 
    number = models.CharField(max_length=20, unique=True) 
    type = models.CharField(max_length=1, choices=CHOICES) 

我的 views.py 包含:

class PersonCreate(CreateView): 
    model = Person 
    fields = ['first_name', 'last_name', 'description'] 
 
class PhoneCreate(CreateView): 
    model = Phone 
    fields = '__all__' 

我的 urls.py 包含:

url(r'^(?P<pk>\d+)/$', PersonDetailView.as_view(), name = 'detail'), 
url(r'^(?P<pk>\d+)/addPhone$', PhoneCreate.as_view(),  
     name='phone_create') 

现在它是这样工作的: 我正在进入 Person 详细信息 View (url:“详细信息”)。这里我有一个 Add Address 按钮,可以将我重定向到查看 (url: 'phone_create'),但我仍然必须选择人员。如何从详细 View 自动创建联系人的电话号码?

请您参考如下方法:

我找到了正确答案:

class PhoneCreate(CreateView): 
    model = Phone 
    fields = ['number', 'type'] 
 
    def form_valid(self, form): 
        form.instance.person_id = self.kwargs.get('pk') 
        return super(PhoneCreate, self).form_valid(form)