Я сделал, чтобы типичный администратор изменил форму для объекта с обычными формами StackedInline для отношений ForeignKey. Я хотел бы смочь связать каждый встроенный объект с его соответствующей полноразмерной формой изменения, поскольку встроенный объект встроил собственные объекты, и я не могу вложить их.
Я попробовал все от пользовательских виджетов до пользовательских шаблонов и не могу заставить ничего работать. До сих пор "решения", которые я видел в форме отрывков просто, кажется, не работают на, встраивает. Я готовлюсь пробовать некоторый DOM, взламывающий jQuery только, чтобы получить его работа и идти дальше.
Я надеюсь, что должен пропускать что-то очень простое, поскольку это походит на такую простую задачу!
Использование Django 1.2.
У меня была похожая проблема, и я придумал собственный виджет плюс некоторые изменения в форме модели. Вот виджет:
from django.utils.safestring import mark_safe
class ModelLinkWidget(forms.Widget):
def __init__(self, obj, attrs=None):
self.object = obj
super(ModelLinkWidget, self).__init__(attrs)
def render(self, name, value, attrs=None):
if self.object.pk:
return mark_safe(
u'<a target="_blank" href="../../../%s/%s/%s/">%s</a>' %\
(
self.object._meta.app_label,
self.object._meta.object_name.lower(),
self.object.pk, self.object
)
)
else:
return mark_safe(u'')
Теперь, поскольку виджет для каждого инлайна должен получить свой объект в конструкторе, вы не можете просто установить его стандартным способом, а в методе init формы:
class TheForm(forms.ModelForm):
...
# required=False is essential cause we don't
# render input tag so there will be no value submitted.
link = forms.CharField(label='link', required=False)
def __init__(self, *args, **kwargs):
super(TheForm, self).__init__(*args, **kwargs)
# instance is always available, it just does or doesn't have pk.
self.fields['link'].widget = ModelLinkWidget(self.instance)
Надеюсь, это поможет.