如何在 CreateView 中动态设置 ForeignKey 的初始值?
Posted
技术标签:
【中文标题】如何在 CreateView 中动态设置 ForeignKey 的初始值?【英文标题】:How to set initial value of ForeignKey dynamically in CreateView? 【发布时间】:2020-10-31 07:47:46 【问题描述】:我想在 CreateView 中动态设置 ForeignKey 的初始值。但是有什么简单的方法可以做到这一点吗? 我试过this(作为这个链接的答案)。但它不起作用。 如何将专辑(ForeignKey)传递给 CreateView 中的字段?
models.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
views.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'),
]
【问题讨论】:
将get_object_or_404(Album, pk=self.kwargs.get('album.pk'))
替换为get_object_or_404(Item, pk=self.kwargs.get('album'))
会发生什么?
这是 404 没有与给定查询匹配的专辑。在两个
【参考方案1】:
如果你想获取对象(album
),其中 album.pk == id
(id
是'item-add'
的 URL 参数)然后试试这个,
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',
【讨论】:
以上是关于如何在 CreateView 中动态设置 ForeignKey 的初始值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用请求数据在基于 Django 类的通用 createview 上设置初始数据
如何将引导类添加到模板中的 Django CreateView 表单字段?