如何在CreateView中动态设置ForeignKey的初始值



我想在CreateView中动态设置ForeignKey的初始值。但有什么简单的方法可以做到这一点吗?我试过这样(作为这个链接的答案(。但它不起作用。如何将相册(ForeignKey(传递到CreateView中的字段?

型号.py

class Album(models.Model):
credit = models.CharField(max_length=250)
album_title = models.CharField(max_length=100)
logo = models.FileField()
def get_absolute_url(self):
return reverse('picture:detail', kwargs={'pk': self.pk})
def __str__(self):
return self.album_title + ' - ' + self.credit

class Item(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
file_type = models.CharField(choices=TYPE_CHOICES, max_length=1)
caption = models.CharField(max_length=100)
class Meta:
ordering = ('upload_date', 'caption')
def get_absolute_url(self):
return reverse('picture:item-detail', kwargs={ 'id': self.album_id , 'pk': self.pk})
def __str__(self):
return self.caption

视图.py

class ItemCreate(CreateView):
model = Item
fields = ['album', 'file_type', 'caption']
def get_initial(self):
album = get_object_or_404(Album, pk=self.kwargs.get('album.pk'))
return {
'album': album,
'file_type': 't',
}

urls.py

urlpatterns = [
# /picture/<album_id>/
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
# /picture/<album_id>/<pic_id>
url(r'^(?P<id>[0-9]+)/(?P<pk>[0-9]+)/$', views.ItemDetailView.as_view(), name='item-detail'),
# /picture/<album_id>/pic/add
url(r'^(?P<id>[0-9]+)/pic/add/$', views.ItemCreate.as_view(), name='item-add'),
]

如果您想获取album.pk==id(id'item-add'的URL参数(所在的对象(album(,请尝试此操作,

class ItemCreate(CreateView):
model = Item
fields = ['album', 'file_type', 'caption']
def get_initial(self):
album = get_object_or_404(Album, pk=self.kwargs['id'])
return {
'album': album,
'file_type': 't',
}

最新更新