python - 如何从 Django 中的先前视图(CBV)中获取对象?
问题描述
我试图从以前的 DetailView 中获取 CreateView 中的对象值。但失败了。有什么简单的方法可以做到这一点吗?
在这段代码中,我怎样才能用专辑对象替换这个'???'(在CreateView中),其中专辑对象根据'item-add'(url(r'^(?P<id>[0-9]+)/pic/add/$', views.ItemCreate.as_view(), name='item-add')
)
模型.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 DetailView(generic.DetailView):
model = Album
template_name = 'picture/detail.html'
class ItemCreate(CreateView):
model = Item
fields = ['album', 'file_type', 'caption']
def get_initial(self):
album = ???
return {
'album': album,
'file_type': 't',
}
网址.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'),
]
解决方案
主键作为id
URL 参数传递,因此您可以通过以下方式访问它self.kwargs
:
from django.shortcuts import get_object_or_404
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',
}
推荐阅读
- php - 发送 PHP 邮件,以便邮件在收件箱中作为一个对话堆叠或模仿回复
- git - 在 git 中从 LFS 跟踪的子文件夹中检出一个文件夹
- amazon-web-services - 如何通过 R Studio 从 S3 存储桶同步和读取文件 - 使用 Putty SSH 连接到本地主机?
- javascript - 我可以在 React 功能组件中添加异步功能吗
- cassandra - Cassandra PER PARTITION LIMIT not working 在开发中心抛出错误
- hadoop - 如何让 Impala v2.5 设置选项 live_progress 和 live_summary 工作
- swift - 如何为我的 30 个文本字段输入转义小键盘/键盘?
- apache-spark - Spark:如何使用 Avro 模式创建数据集?
- azure-sql-server - 将 bacpac 文件导入本地 SQL Server
- git - PowerShell Core 不能很好地与 jq 配合使用