使用ForeignKey字段的Django CreateView

问题描述 投票:2回答:1

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

我的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详细视图(url:'detail')。在这里,我有一个Add Address按钮,重定向我查看(网址:'phone_create'),但我仍然需要选择人。如何自动从详细视图创建电话号码给人?

python django
1个回答
3
投票

我找到了正确的答案:

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)
© www.soinside.com 2019 - 2024. All rights reserved.