Добавление ссылок к полному изменению формируется для встроенных объектов в django администраторе?

Я сделал, чтобы типичный администратор изменил форму для объекта с обычными формами StackedInline для отношений ForeignKey. Я хотел бы смочь связать каждый встроенный объект с его соответствующей полноразмерной формой изменения, поскольку встроенный объект встроил собственные объекты, и я не могу вложить их.

Я попробовал все от пользовательских виджетов до пользовательских шаблонов и не могу заставить ничего работать. До сих пор "решения", которые я видел в форме отрывков просто, кажется, не работают на, встраивает. Я готовлюсь пробовать некоторый DOM, взламывающий jQuery только, чтобы получить его работа и идти дальше.

Я надеюсь, что должен пропускать что-то очень простое, поскольку это походит на такую простую задачу!

Использование Django 1.2.

36
задан Bill the Lizard 27 October 2010 в 02:29
поделиться

1 ответ

У меня была похожая проблема, и я придумал собственный виджет плюс некоторые изменения в форме модели. Вот виджет:

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)

Надеюсь, это поможет.

11
ответ дан 27 November 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: