featured.featureworklink_set.add(FeatureWorkLink(image=link))
немедленно попытается создать связь между FeatureWork
и FeatureWorkLink
, что не произойдет, потому что этот экземпляр FeatureWork
отсутствует в базе данных, и вы не можете удовлетворить предикаты дляпостроение отношений внешнего ключа.
Но замечательно, что экземпляры Django Model
и ModelForm
не будут проверять отношения внешнего ключа до тех пор, пока вы фактически не попытаетесь зафиксировать данные.Поэтому ручное построение вашего FeaturedWorkLink
с некоммитированным, несуществующим FeatureWork
должно удовлетворять любому представлению данных, которые вам нужно сделать, во многом так, как вы ожидаете:
links = []
form = FeatureWorkAdminForm(initial=request.POST)
featured = form.save(commit=False)
for link in request.POST['links'].split(","):
links.add(FeatureWorkLink(image=link, feature_work=featured))
# then somewhere in your templates, from the context
{% for link in links %}
<img src="{{ link.image }}"
title="Image for the featured work: '{{ link.feature_work.name }}'" />
{% endfor %}
Так, в основном, во времяВ ходе сбора данных для создания FeatureWork
вам придется поддерживать экземпляры FeatureWorkLink
посредством последующих запросов.Здесь вы будете использовать набор форм модели, но предоставите незафиксированное FeatureWork
для свойства feature_work
для каждого экземпляра формы модели набора, вплоть до момента, когда все данные были собраны, где вы затем предоставляетепереданный FeatureWork
экземпляр, так что набор форм модели может удовлетворить ссылочную целостность и, наконец, быть переданным в базу данных.