Вопросы с тегами [inline-formset]

1

голосов
0

ответ
172

Просмотры

Django форма с инлайн / вложенными данными

Я пытаюсь создать редактор для вопроса, тогда вопрос может иметь несколько файлов, связанных с ним. Я пытался заставить его работать с inline_formsets, но я не могу заставить его работать правильно. Форма Я пытаюсь создать для Вопроса в то время как я хочу, чтобы пользователь, чтобы иметь возможность загружать файлы на вопрос о том же виде. models.py DEF Вопрос (models.Model): название = models.CharField ( 'Title', max_length = 200) ... Защита AdditionalData (models.Model): вопрос = models.ForeignKey (Вопрос, related_name = 'additionalData`, on_delete = models.CASCADE) закачивать = models.FileField ( 'Data', upload_to = ...) forms.py класс QuestionForm (forms.ModelForm) класс Meta: модель = вопрос поля # = '__all__' для примера только AdditionalDataFormset = формы. non_form_errors}} {% для additional_data в additional_data_formset%} {{additional_data | хрустящей}} {% ENDFOR%} Отправить По некоторым причинам, когда я использую встроенный FormSets «Отправить» кнопка не работает (ничего не происходит, когда я нажимаю его) , При попытке заставить отправить форму (с помощью JQuery OnClick кнопки отправки) отбрасывается эта ошибка: «ManagementForm данные отсутствуют или были подделаны» Я не могу понять, почему это происходит. Что касается гнездового метода, я не смог найти пример, который демонстрирует его только две модели, так что я не уверен в том, как использовать его в этом обстоятельстве. Как вы можете видеть выше, я сделал звонок в «management_form» отлично, так что я не знаю, почему это происходит. Дополнительная информация: Вопрос может иметь любое количество файлов (экземпляры AdditionalData), связанное с ним. Любая информация на выше ошибки или советы о том, как реализовать такую ​​форму, которая может иметь переменное число подформ было бы весьма признателен.
steven landau
1

голосов
2

ответ
720

Просмотры

Как сбросить «DELETE» параметров Ложь в чистом методе Джанго пользовательских formset в

Я сделал пользовательский formset с настраиваемым чистым методом в нем. Это выглядит следующим образом: класс MyFormsetBase (forms.models.BaseModelFormSet): Защита __init __ (самоповреждения, * арг, ** kwargs): .... супер (AdvOrderBidFormsetBase, самость) .__ INIT __ (* арг, ** kwargs) Защита чистый ( самостоятельно): .... если ошибка: поднять forms.ValidationError ( «некоторые ошибки проверки») Когда я удалить некоторые формы (с неправильным paramaeters) от formset и нажмите кнопку Submit (форма имеет уДАЛИТЬ значение поля == True) Я получаю ошибку = True в моем чистом методе так что я получаю ValidationError и вернуться, чтобы сформировать окно. Но УДАЛИТЬ значение поля в форме не сбрасывается. И в следующий раз, когда я представлю свою форму я получу такое же ValidationError. Таким образом, я мог какой-то образом изменить значение УДАЛИТЬ поля в моем пользовательском чистом методе?
Tural Gurbanov
1

голосов
1

ответ
970

Просмотры

Как начальное и дополнительное отношение в Django инлайн FormSets?

Документация Django говорит, что «Как показано выше, вы можете определить количество дополнительных форм. Что это означает, что вы говорите formset, сколько дополнительных формы, чтобы показать, в дополнении к числу форм, которые она получает от исходных данных.» Источник здесь. Тем не менее, (по крайней мере) с инлайн FormSets, что, кажется, не так. Похоже, что дополнительный параметр определяет общее количество форм. Если я пишу дополнительные = 0 Я не буду просто иметь никаких форм на всех, чтобы показать, с дополнительными = 1, я только получить первый, и так далее. Похоже, вы должны установить дополнительные к длине исходных данных (не очень сухой, не так ли?) Некоторые примеры, когда люди делают то же самое (за дополнительную плату = Len (myinitial)): Различные исходные данные для каждой формы в formset formset Джанго и ввода текста для каждого внешнего ключа Исходные данные для Django Инлайн FormSets Возникает вопрос: Я пропускаю что-нибудь в документации или почему это имеет смысл? Заметка. Я не включая исходный код, потому что я разрабатываю с Джанго-экстра-видом с добавляет дополнительную сложность в примере кода. Тем не менее, несколько примеров вокруг, кажется, указывают на то же самое. (Я не уверен, что я сделал с предыдущими проектами, хотя, но я думаю, что я столкнулся с той же проблемой с простым рядный наборы форм). Несколько примеров вокруг, кажется, указывают на то же самое. (Я не уверен, что я сделал с предыдущими проектами, хотя, но я думаю, что я столкнулся с той же проблемой с простым рядный наборы форм). Несколько примеров вокруг, кажется, указывают на то же самое. (Я не уверен, что я сделал с предыдущими проектами, хотя, но я думаю, что я столкнулся с той же проблемой с простым рядный наборы форм).
jleeothon
1

голосов
1

ответ
144

Просмотры

Render only fields in a Django inline_formset

I want to render only fields in a Django inline_formset. This is my template: Storage {% for form in storage_formset %} {{ form.help_texts }} {{ form.errors }} {{ form }} {% endfor %} And this is my form: help = {'field1' : "help1", 'field2' : "help2"} StorageFormSet = inlineformset_factory(WorkOrder, Storage, min_num=0, max_num=2, validate_min=True, validate_max=True, extra=1, help_texts=help, fields=('field1', 'field2')) This one works, but when it renders, it renders everything (field and field name) in the form and I want it to only render the field. Other thing is that the help_texts don't work (I don't know if I'm using it right). If I use: {{ form.field1 }} It renders field1, but I want to do it dynamically, so I don't have to repeat again and again. And if I use: {{ form.fields }} It renders a bunch of code OrderedDict( [('field1', ), ('field2', ), (u'id', ), (u'DELETE', ), ('parent_field', )]) I don't know what else to do. Thank you if you can help me.
Roger Gonzalez
1

голосов
1

ответ
177

Просмотры

Джанго - Выясните, какой экземпляр модели я редактирую в инлайн formset

Примечание: Я новичок в Django и Python. Я не уверен, если я неправильно использовать встроенные FormSets в некотором роде. Мне нужно было, чтобы иметь возможность редактировать определенные поля для нескольких экземпляров модели посетителей (связанный с родителем Invite модели), в то же время в одной форме. После того, как много назад и вперед, мне удалось создать встроенный formset, отправляющий успешно. Однако, интерфейс сбивает с толку, потому что вы не знаете, какой гость вы заполняете в деталях для. Каждый гость имеет поле guest_name, и я просто хочу показать, что имя для каждой формы, чтобы пользователи знали, кто они для редактирования. Вот мой (сгущенный) вид: Защита extra_view (запрос, код): # Получить конкретный пригласить пригласить = get_invite (код) # Получить контекст из запроса. контекст = RequestContext (запрос) # Сохранение гостей, посещающих объект guests_attending = invite.guest_set.filter (посещение = True, пригласить = пригласить) # Создать formset для каждого гостя GuestFormset = inlineformset_factory (Invite, гость, форма = ExtraForm, поля = (» диета», 'транспорт'), экстра = 0, can_delete = False), если request.method == "POST": formset = GuestFormset (request.POST, request.FILES, экземпляр = пригласить QuerySet = Guest.objects.filter ( присутствовать = 1)), если formset.is_valid (): # Сохранение данных в базе данных. formset.
1

голосов
1

ответ
223

Просмотры

excluding id field in an inline formset when saving

У меня есть две модели, связанные внешним ключом. Одним из них является встроенным formset. По какой-то причине, formset идентификаторы идентифицируются как первичные ключи в базе данных, и каждый раз, когда форма была отправлена, таблица, принадлежащая к formset в основном перезаписана. При сохранении, как я игнорировать formset Идентификаторы models.py класс Student (models.Model): first_name = models.CharField (max_length = 40) last_name = models.CharField (max_length = 40) по электронной почте = models.EmailField () Курсы класса (models.Model): студент = models.ForeignKey (студент) COURSE_NAME = models.CharField (max_length = 40) start_time = models.TimeField () forms.py класс CoursesForm (forms.ModelForm): класс Meta: модель = Курсы исключают = ( "студент",) класс StudentForm (forms.ModelForm): класс Meta:
Davida C
1

голосов
1

ответ
279

Просмотры

Джанго - Изменить кнопку Inlineformset Удалить

Я делаю пользовательский интерфейс / UX для inlineformset. По умолчанию inlineformset виджет имеет кнопку удаления. Я бледный, чтобы добавлять и удалять формы из inlineformset динамического с помощью JavaScript. В некоторых случаях удаление просто кнопка вместо флажка, в других случаях в окне модального. Когда пользователь нажмет удалить форма удаляется со страницы с помощью JavaScript. Таким образом, я пытаюсь сделать это без использования виджета по умолчанию, визуализации поля в шаблоне, но я не знаю, как сказать Django ведьмы поля для удаления и если необходимо перенастроить идентификаторы и имена поле.
user3541631
1

голосов
1

ответ
152

Просмотры

Как динамически фильтровать QuerySet ModelChoice в в Inlineformset?

Я просто хочу, чтобы фильтровать выберите поле в inlineformset. Сценарий: Каждая задача имеет свою задачу report.Each имеет бронирование .Booking имеет несколько забронирован items.I хочет отобразить только связанные bookeditems на основе заказа в форме отчета form.Report генерируются с использованием сигналов и при редактировании я использую inlineformset для заполнения образуют с экземплярами. Вот мой код: класс Models.py задачи (models.Model): бронирование = models.ForeignKey (бронирование, пусто = False, нуль = True, related_name = 'booking_id') ...... класса Report (модель. Модель): задача = models.ForeignKey (Task, пустой = True, нуль = True, related_name = 'задача') накопительство = models.OneToOneField (BookedItem, пустой = True, нуль = True, related_name = '+') состояние = models.CharField (MAX_LENGTH = 32, выбор = ReportStatus.CHOICES, пустой = True, нуль = True, хочу, чтобы отобразить только связанные bookeditems, как choicefield в каждой области копит отчет. Я попытался выше кода, но никакого результата.
Emil George James
1

голосов
1

ответ
1k

Просмотры

Джанго вложенное FormSets добавляющих форм динамически

Я пытаюсь создать страницу опроса с помощью Django, который имеет функциональные возможности для добавления вопросов и выбора (для каждого вопроса) динамически. У меня есть три следующие классы моделей: Survey, вопрос и выбор. Я сделал много исследований, чтобы выяснить, как идти о реализации форм и, кажется, вложенное FormSets с помощью inline_formsets это правильный путь, чтобы идти (я использовал этот учебник). Тем не менее, я не могу понять, как добавить вопросы и варианты динамически с вложенной библиотекой formsets.The JavaScript, что я пытаюсь использовать (Эту библиотеку) не пример для вложенных FormSets, и я не уверен, если он поддерживает Это. Этот код, что я до сих пор: forms.py от django.forms импорта BaseInlineFormSet из django.forms импорта HiddenInput из django.forms импорта inlineformset_factory из django.forms импорта ModelForm из. # MyForm2' ) formset ({префикс:. '{{Choice_form.prefix}}', formCssClass: 'динамической choice_form', AddText: 'добавить выбор'}); }) {%}% Концевого блок
ehka
1

голосов
1

ответ
68

Просмотры

Доступ Родитель Встраиваемых наборы форм в шаблоне?

Мне интересно, как получить доступ к родителю строкового форме, установленной в Django. Вот то, что я сейчас делаю: views.py Защиту загрузить (запрос): [Код пропущены] formSet = inlineformset_factory (Tombstone, танк, форма = TombstoneForm) форма = formSet (экземпляр = т) возвращают визуализации (запрос «edit_form2.html », {„форма“: форма}) в данном случае я хочу получить доступ к объекту Надгробия в моем шаблоне. Изменить: Я хочу, чтобы получить доступ к элементу формы, связанный с каждым полем в объекте Tombstone.
Jordan Rose
1

голосов
1

ответ
0

Просмотры

Джанго: Инлайн редактирование соответствующей модели с использованием inlineformset

Я до сих пор застряли с инлайн Древовидное-eiditing родственных моделей на одной странице. У меня есть три модели, A, B и C. Класс A Класс B фб = ForeignKey (А) класса С к = ForeignKey (B) В admin.py я делаю что-то вроде AdminA встраивает = [inlineB] AdminB встраивает = [inlineC] Я хочу, чтобы, когда я изменить / добавить модель а, я должен быть в состоянии добавить ModelB инлайн, и добавить соответствующие записи Model B в модели C. Я испытывал inlineformsets, но не могу узнать, как использовать их для моей цели. Кроме того, я нашел эту старую дискуссию по той же проблеме. Но опять же, так как я новичок в Django, я не знаю, как заставить его работать.
Neo
1

голосов
2

ответ
158

Просмотры

Как я могу получить URL изображения из поля изображения в качестве InlineFormset?

У меня есть следующие модели: класс событий (models.Model): Имя = models.CharField (max_length = 128, нуль = True, пустой = True) Класс Picture (models.Model): событие = models.ForeignKey (Event) изображение = models.ImageField (upload_to = «СМИ») Изображение имеет FK для модели событий, поэтому, когда я хочу, чтобы использовать их в форме (создать событие и добавить фотографии к нему), я использую встроенный formset. форма # События не важно PictureFormSet = inlineformset_factory (Событие, Фото, MIN_NUM = 1, validate_min = True, дополнительный = 1, поля = ( 'образ',), can_delete = True), они работают отлично, когда я создаю событие и загрузки файлы. Проблема заключается в том, когда я хочу, чтобы изменить событие. Я использую эту точку зрения: Защита event_summary (запрос, event_id): события = Event.objects. получить (ID = event_id) форма = EventForm (экземпляр = событие) picture_formset = PictureFormSet (экземпляр = событие), если request.method == 'POST': форма = EventForm (request.POST, экземпляр = событие), если form.is_valid () : event_saved = form.save (фиксации = False) picture_formset = PictureFormSet (request.POST, request.FILES, экземпляр = event_saved), если picture_formset.is_valid (): event_saved.save () picture_formset.save () возвращает редирект (active_events) возвращение визуализации (запрос, «event_summary.html», { «форма»: форма, «picture_formset»: picture_formset, «событие»: событие}) И я хочу, чтобы отобразить только URL изображения в шаблоне. Если я использую: {% для picture_field в picture_formset%} {{picture_field. изображение}} {% ENDFOR%} Это показывает URL, и выберите вход, но мне нужно URL, чтобы использовать его в виде эскиза и вход отдельно. Я читал, что {{}} picture_field.image.url работает, но это не так. Любая помощь будет оценена. Благодарю.
Roger Gonzalez
1

голосов
1

ответ
169

Просмотры

Django: Dynamic inline forms with filter upon user selection

Я создал эти модели: класс обслуживания (models.Model): имя = models.CharField код (пробел = False, max_length = 200) здесь класс Monitor (models.Model): Имя = models.CharField (пусто = False, max_length = 100) услуги = models.ManyToManyField (Service, related_name = 'мониторы') класс Student (models.Model): имя = models.CharField (пустой = False, max_length = 100) класс ServiceMonitors (models.Model): студент = модели. ForeignKey (Student, on_delete = models.CASCADE) обслуживание = models.ForeignKey (Service, on_delete = models.CASCADE) мониторы = models.ManyToManyField (монитор) Эти модели представляют собой компании, которые предлагают множество услуг для студентов. Мониторы, которые работают в этой компании назначаются студенты, которые нуждаются в услугах, которые они предлагают. Монитор может предложить множество услуг и имеет много студентов для каждого из них. Также, студент может иметь множество услуг и мониторы. Давайте предположим, что у нас есть 3 услуги, s1, s2 и s3. Когда мы создаем новый монитор мы относим его / ее некоторые из этих услуг, скажем, s1 и s3. Затем, когда мы создаем новый студент, мы должны иметь возможность выбирать, какие услуги и мониторы будет иметь студента. Моя проблема в том, что мне нужно, чтобы создать форму студента (имя, телефон, и т.д. ...), что позволяет мне: Выберите услугу управления ниспадающего После служба выбрана форма должна показать мониторы, которые предлагают что обслуживание, так что я могу выбрать один или несколько из них (флажков). A + кнопка для создания / показать новую форму, чтобы повторить этот процесс, так что я могу выбрать новую услугу и соответствующие мониторы. Я новичок в Django. Я был в состоянии создать строковую форму в виде создания пользователя, но я застрял здесь. У меня теперь контроль выпадающий выбрать услугу, и ModelMultipleChoiceField с CheckboxSelectMultiple виджет, который показывает все мониторы. Отсюда мне нужно знать, как фильтровать эти мониторы, когда пользователь выбирает услугу, и как добавить новые формы для выбора новых услуг / мониторов.
ESS
1

голосов
1

ответ
675

Просмотры

Как маркировать экземпляр формы в пределах Джанго инлайн formset?

У меня есть то, что я думаю, что это достаточно распространенная ситуация, но не могу получить мою голову вокруг него. Я использовал django.forms.inlineformset_factory создать formset форм, которые позволяют пользователю изменять аспекты внешнего ключа объекта, и они работают отлично. Беда в том, что я хочу, чтобы иметь возможность маркировать каждую из этих форм в formset (обратите внимание, не поля в каждой форме, но внешний ключ модель, на которой базируется каждая форма). Например, если я подправить пример в документации: от импортных моделей django.db из django.forms импорта inlineformset_factory класс Автор (models.Model): имя = models.CharField (max_length = 100) класс Book (models.Model): Автор = models.ForeignKey (Автор, on_delete = models.CASCADE) название = models.CharField (max_length = 100) страница = модель. IntegerField (по умолчанию = 0) Я создаю мой formset, чтобы позволить людям изменить количество страниц в любой книге Даффи Дак: BookFormSet = inlineformset_factory (Автор, книги, поля = ( «страницы»,)) автор = Author.objects.get (имя = «Daffy Duck») formset = BookFormSet (пример = автор) Say Даффи написал пять книг, они отображаются как целые записи все меченые «Страницы», без ссылки на какую книгу каждый указывает. Как я могу обозначить форму с названием книги, так что они знают, какой они меняются? Я попытался пропускание словаря в поле меток в inlineformset_factory функции, но это не сработало. ) Formset = BookFormSet (пример = автор) Say Даффи написал пять книг, они отображаются как целые записи все меченые «Страницы», без ссылки на какую книгу каждый указывает. Как я могу обозначить форму с названием книги, так что они знают, какой они меняются? Я попытался пропускание словаря в поле меток в inlineformset_factory функции, но это не сработало. ) Formset = BookFormSet (пример = автор) Say Даффи написал пять книг, они отображаются как целые записи все меченые «Страницы», без ссылки на какую книгу каждый указывает. Как я могу обозначить форму с названием книги, так что они знают, какой они меняются? Я попытался пропускание словаря в поле меток в inlineformset_factory функции, но это не сработало.
keri
1

голосов
1

ответ
824

Просмотры

How can I change the queryset of one of the fields in the form I'm passing to inlineformset_factory

Я использую Джанго дополнительных просмотры: # views.py от django.forms.models импорт inlineformset_factory от импорта extra_views (CreateWithInlinesView, UpdateWithInlinesView, InlineFormSet,) класс LinkInline (InlineFormSet): модель = форма Link = LinkForm дополнительного = 1 Защита get_form (самообеспечение ): возвращение LinkForm ({}) защиту get_formset (Я): возвращение inlineformset_factory (self.model, self.get_inline_model (), форма = LinkForm, ** self.get_factory_kwargs ()) класс TargetCreateView (BaseSingleClient, CreateWithInlinesView): модель = Target form_class = TargetForm встраивает = [LinkInline,] TEMPLATE_NAME = «клиенты / target_form.html» Я хочу, чтобы это поле «ключевые слова», чтобы меняться в зависимости от рк перехожу к просмотру через URL. # Класса forms.py LinkForm (forms.ModelForm): ключевые слова = форма.
la_f0ka
0

голосов
0

ответ
5

Просмотры

Creating a form wizard / formset to answer questions from a table and saving them into another (Survey)

I am new to Django. I apologize if I don't make much sense. I have an EU project to create a survey tool for adult educators who are assisting migrants and refugees. I would like to use a WizardView/SessionView together with formset to answer a set of 24 questions from a matrix based on Max-Neef's Human Needs theory and Self Determination Theory. The idea is that Survey model will inherit 24 questions with ForeignKey one by one in a WizardView with previous/next/save functions as the user populate reflection field save them into the survey table. I have been pondering how might I save code instead of creating 24 tables for wizard view and use a hybrid of formsets and form_tools. How might one create such a tool? Any help will be most appreciated. Thank you in advance. I tried ModelForms and class based Views following several tutorials on the web and paid websites. models.py from django.urls import reverse from django.db import models from django.utils import timezone from django.contrib.auth.models import User from django.forms import ModelChoiceField class QuestionChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "Question: {}".format(obj.name) def formfield_for_foreignkey(self, question, request, **kwargs): if question.name == 'question': return QuestionChoiceField(queryset=Question.objects.all()) return super().formfield_for_foreignkey(question, request, **kwargs) class Question(models.Model): LEVELS = ( ('Self', 'Relationship with myself'), ('Peers', 'Relationship with my peers'), ('Learners', 'Relationship with my learners'), ('Workplace', 'Relationship with my workplace'), ('Society', 'Relationship with my community'), ('Planet', 'Relationship with the global society'), ) COMPETENCES = ( ('Life Internal', 'Life Internal'), ('Life External', 'Life External'), ('Relatedness', 'Relatedness'), ('Autonomy', 'Autonomy'), ) level = models.CharField(max_length=64, choices=LEVELS) competence = models.CharField(max_length=64, choices=COMPETENCES) question = models.TextField(max_length=400) objects = models.Manager() class Meta: ordering = ['competence'] verbose_name = "Question" verbose_name_plural = "Questions" def __str__(self): return f'{self.question}' class Survey(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="surveys", verbose_name="Survey Question:") reflection = models.TextField(max_length=400) started_at = models.DateTimeField(default=timezone.now) is_complete = models.BooleanField(verbose_name="Completed?") author = models.ForeignKey(User, related_name="surveys", on_delete=models.CASCADE, verbose_name="Author:") objects = models.Manager() class Meta: ordering = ['author'] verbose_name = "Survey" verbose_name_plural = "Surveys" def __str__(self): return f'{self.author.username}' ': ''\n' \ f'{self.question}' '\n' \ f'{self.reflection}' def get_indexed_objects(self): return Survey.objects.filter(live=True) def save(self, *args, **kwargs): super().save(*args, **kwargs) def get_absolute_url(self): return reverse('Survey-detail', kwargs={'pk': self.pk}) forms.py from django import forms from SDAM.models import Survey, Question from selectable.forms import AutoComboboxSelectWidget from .lookups import QuestionLookup class QuestionForm(forms.ModelForm): def clean(self): super(QuestionForm, self).clean() class Meta: model = Question fields = ['question', 'level', 'competence'] widgets = { 'level': AutoComboboxSelectWidget(lookup_class=QuestionLookup), 'competence': AutoComboboxSelectWidget(lookup_class=QuestionLookup), } class SurveyForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) class Meta: model = Survey fields = ['question', 'reflection', 'author', 'started_at', 'is_complete'] widgets = { 'level': AutoComboboxSelectWidget(lookup_class=QuestionLookup), 'competence': AutoComboboxSelectWidget(lookup_class=QuestionLookup), 'question': AutoComboboxSelectWidget(lookup_class=QuestionLookup), } def clean(self): # Super the clean method to maintain main validation and error messages super(SurveyForm, self).clean() question = self.cleaned_data.get('question') author = self.cleaned_data.get('author') reflection = self.cleaned_data.get('reflection') started_at = self.cleaned_data.get('started_at') is_complete = self.cleaned_data.get('is_complete') survey = Survey.objects.get(question=question, reflection=reflection, author=author, started_at=started_at, is_complete=is_complete) return survey.save() def save(self, commit=True): instance = super(SurveyForm, self).save(commit=False) if commit: # save instance.save(update_fields=['question', 'reflection', 'author', 'started_at', 'is_complete']) return instance views.py from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth.models import User from django.utils import timezone from django.shortcuts import get_object_or_404, render, reverse from django.views.generic import (CreateView, DeleteView, DetailView, ListView, UpdateView) from .filters import SurveyFilter from .forms import SurveyForm from .models import Survey """ @login_required def home(request): context = { 'surveys': Survey.objects.all() } return render(request, 'SDAM/survey.html', context) """ class SurveyListView(LoginRequiredMixin, ListView): model = Survey form_class = SurveyForm context_object_name = 'survey_list' ordering = ['-started_at'] template_name = "SDAM/survey_list.html" paginate_by = 3 def get_queryset(self, *args, **kwargs): return super().get_queryset() def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['is_complete'] = True context['surveys'] = Survey.objects.all() return context class UserSurveyListView(LoginRequiredMixin, ListView): model = Survey context_object_name = 'user_surveys' template_name = 'SDAM/user_surveys.html' # /_.html paginate_by = 3 def get_queryset(self): author = get_object_or_404(User, username=self.kwargs.get('author')) return Survey.objects.filter(author=author, is_complete=True).order_by('-started_at') def get_context_data(self, **kwargs): context = super(UserSurveyListView, self).get_context_data(**kwargs) context['user_surveys'] = Survey.objects.all() context['is_complete'] = True context['filter'] = SurveyFilter(self.request.GET, queryset=self.queryset()) return context class SurveyDetailView(LoginRequiredMixin, DetailView): model = Survey template_name = "SDAM/survey_detail.html" queryset = Survey.objects.all() def get_object(self): obj = super().get_object() # Record the last accessed date obj.last_accessed = timezone.now() obj.save() return obj class SurveyCreateView(LoginRequiredMixin, CreateView): model = Survey fields = ['question', 'reflection', 'started_at', 'is_complete'] def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form) class SurveyUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): model = Survey fields = ['reflection', 'started_at', 'is_complete'] template_name = "SDAM/survey_update.html" def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form) def test_func(self): survey = self.get_object() if self.request.user == survey.author: return True return False class SurveyDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): model = Survey success_url = '/sdam/' def test_func(self): survey = self.get_object() if self.request.user == survey.author: return True return False lookups.py from selectable.base import LookupBase from selectable.registry import registry from .models import Survey, Question class QuestionLookup(LookupBase): model = Question search_fields = ('level', 'competence', 'question',) def get_query(self, request, term): data = ['Level', 'Competence', 'Question'] return [x for x in data if x.startswith(term)] class SurveyLookup(LookupBase): model = Survey search_fields = ('question', 'reflection', 'author', 'started_at', 'is_complete',) def get_query(self, request, term): data = ['Question', 'Reflection', 'Author', 'Started_at', 'Is_complete'] return [x for x in data if x.startswith(term)] registry.register(QuestionLookup) registry.register(SurveyLookup) filters.py import django_filters from .models import Survey, Question class SurveyFilter(django_filters.FilterSet): class Meta: model = Survey fields = ("question", "reflection", "author", "started_at", "is_complete",) class QuestionFilter(django_filters.FilterSet): class Meta: model = Question fields = ("competence", "level", "question",) admin.py from ckeditor.widgets import CKEditorWidget from selectable.forms import AutoComboboxSelectWidget, AutoCompleteSelectField, AutoCompleteSelectMultipleWidget from django.forms import ModelChoiceField from django.contrib import admin from django import forms from SDAM.models import Survey, Question from .lookups import QuestionLookup, SurveyLookup class QuestionChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "Question: {}".format(obj.name) def formfield_for_foreignkey(self, question, request, **kwargs): if question.name == 'question': return QuestionChoiceField(queryset=Question.objects.all()) return super().formfield_for_foreignkey(question, request, **kwargs) class QuestionAdminForm(forms.ModelForm): question = forms.CharField(widget=CKEditorWidget()) class Meta: model = Question fields = ['level', 'competence', 'question'] widgets = { 'level': AutoComboboxSelectWidget(lookup_class=QuestionLookup), 'competence': AutoComboboxSelectWidget(lookup_class=QuestionLookup), } class SurveyAdminForm(forms.ModelForm): reflection = forms.CharField(widget=CKEditorWidget()) class Meta: model = Survey fields = ['question', 'reflection', 'author', 'started_at', 'is_complete'] widgets = { 'question': AutoCompleteSelectField(lookup_class=SurveyLookup), 'level': AutoComboboxSelectWidget(lookup_class=QuestionLookup), 'competence': AutoComboboxSelectWidget(lookup_class=QuestionLookup), } @admin.register(Question) class QuestionAdmin(admin.ModelAdmin): list_display = ['question', 'competence', 'level', "id"] list_filter = ['competence', 'level'] fieldsets = [ ("Question details", {"fields": [ "competence", "level", "question"]}), ] def question(self): return f'{self.question}' @admin.register(Survey) class SurveyAdmin(admin.ModelAdmin): list_display = ["author", "question", "reflection", "started_at", "is_complete"] list_filter = ["author", "question", "is_complete"] fieldsets = [ ("Reflection Details", {"fields": ["question", "reflection", "author", "started_at", "is_complete"]}), ] def survey_author(self): return f'{self.author.username}' urls.py from django.urls import path from .views import ( SurveyListView, UserSurveyListView, SurveyDetailView, SurveyCreateView, SurveyUpdateView, SurveyDeleteView, ) # from . import views urlpatterns = [ path('sdam/', SurveyListView.as_view(), name='Survey-list'), path('user/', UserSurveyListView.as_view(), name='User-surveys'), path('sdam//', SurveyDetailView.as_view(), name='Survey-detail'), path('sdam/new/', SurveyCreateView.as_view(), name='Survey-create'), path('sdam//update/', SurveyUpdateView.as_view(), name='Survey-update'), path('sdam//delete/', SurveyDeleteView.as_view(), name='Survey-delete'), ]
Fatih
1

голосов
1

ответ
1.3k

Просмотры

How to create an inline formset for a reverse foreign key relationship

I have a Property Model as follows = class Property(models.Model): property_type = models.CharField(max_length=255, default='Apartment') specifications = models.CharField(max_length=255, default='Basic') built_up_area = models.FloatField(max_length=6, null=False, default=0) total_area = models.FloatField(null=False, default=0) number_of_bedrooms = models.CharField(max_length=3, default=1) number_of_bathrooms = models.CharField(max_length=3, default=1) number_of_parking_spaces = models.CharField(max_length=2, default=0) address_line_one = models.CharField(max_length=255, null=False) address_line_two = models.CharField(max_length=255, null=True, default=None) connectivity = models.CharField(max_length=255, default=None, null=True) neighborhood_quality = models.CharField(max_length=255, default=None, null=True) comments = models.CharField(max_length=255, default=None, null=True) city = models.ForeignKey('City') state = models.ForeignKey('State') pin_code = models.ForeignKey('PinCode') developer = models.ForeignKey('Developer', null=True, default=None) owner = models.ForeignKey('Owner', null=True, default=None) created_by = models.ForeignKey('custom_user.User') project = models.ForeignKey('Project') def __unicode__(self): return self.property_type class Meta: verbose_name_plural = 'Properties' And a City model as follows - class City(models.Model): name = models.CharField(max_length=255) slug = models.SlugField(unique=True) def save(self, *args, **kwargs): self.slug = slugify(self.name) super(City, self).save(*args, **kwargs) def __unicode__(self): return self.name Now I want to make a single form where I can enter the Property details and while entering the city, I can enter the name of the city instead of selecting from the dropdown list. So how do I create the inline formset using the inlineformset_factory to create the form? ==EDIT== I've tried to use the following code to create the formset CityFormset = inlineformset_factory(City, Property, fields=('city',), extra=0, min_num=1, can_delete=False)
utkbansal
2

голосов
2

ответ
2.9k

Просмотры

specify queryset when instantiating an inlineformset

context_instance = RequestContext (запрос)) Это работает отлично, однако, я хотел бы создать formset, что включает в себя только определенные объекты «UserQualification» (то есть только те, которые помечены как определенный тип), поэтому, когда пользователь получает к этой странице они только редактирование подмножества их квалификации. Эта ссылка, кажется, что я хочу: http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#changing-the-queryset. Она имеет дело с modelformset_factory, однако inlineformset_factory основан на предшествующее, поэтому я полагаю, то же самое должно работать: formset = QualsFormSet (экземпляр = request.user, QuerySet = UserQualification.objects.filter (type__startswith = «хуг»)) Но будет эта страница только дает TypeError: Init () получил неожиданный аргумент ключевого слова 'QuerySet. Есть два способа, перечисленные на этой ссылке и я
rsp
2

голосов
1

ответ
2.4k

Просмотры

Джанго: Как вынести название модели объекта в виде вместо буквального «модели объекта»?

У меня есть следующие модели: отдел, проекты, Departmentprojects, сотрудники и членство. Департамент имеет много проектов и проектов есть много сотрудников, которые назначены роли через членство. Я пытаюсь создать InlineFormset так, что ЕС может назначить роль Служащей к нескольким проектам. Мой шаблон делает правильные метки и поле, но метки и поля Departmentprojects не показывать название проектов. Это только показывает «Departmentprojects объект». Как я могу получить форму, чтобы вынести название проекта вместо «Departmentprojects объекта»? - Текущий шаблон в браузере: Departmentproject метка: (выпадающее меню с двумя вариантами, перечисленных в качестве «объекта Departmentprojects») Роль: Менеджер проекта Желаемой Шаблон в браузере: Имя Departmentproject 1:
thedeepfield
18

голосов
1

ответ
15.3k

Просмотры

как ограничить Джанго администратора инлайн FormSets

Как вы ограничить встроенный formset в Джанго администратора? Проблема: У меня есть таблица А с 1 до п отношения с В. Таблица А должны иметь по крайней мере один элемент таблицы B и максимум из 5 элементов таблицы B. Спасибо
ginad
3

голосов
0

ответ
80

Просмотры

django: inlineformset very slow

formset = RecipeIngredientsFormSet (request.POST, request.FILES, экземпляр = экземпляр) хелперов = RecipePositionCreateFormSetHelper (), если formset.is_valid (): formset.save () # Сделайте что-нибудь. Если обычно заканчиваются редиректа. Например: messages.success (запрос, "успешно обновлен", extra_tags = 'тревога') возвращение HttpResponseRedirect ( '') еще: formset = RecipeIngredientsFormSet (экземпляр = экземпляр) хелперов = RecipePositionCreateFormSetHelper () контекст = { "экземпляра": экземпляр, "formset": formset, "помощник": помощник, "URL": instance.get_absolute_url_recipe_update_inline_bulk_ingredients ()} возвращение визуализации (запрос, 'recipe_recipositions_bulk_edit.html' , Контекст) Я искал в сети, но не в состоянии понять. Я использую панель инструментов Django Debug. Если у меня есть 56 RecipePosition элементов для конкретного рецепта. это заняло у меня 36 секунд, чтобы загрузить
Santhosh Yedidi
6

голосов
2

ответ
16.7k

Просмотры

Джанго: как отображать ошибки формы для каждого объекта модели в инлайн formset

I have a author model and a books model. A user can modify properties of all the books from a given author. I want to be able to display errors for each individual book rather than have all the errors listed on the top, How can I do this? MODELS from django.db import models from django.forms import ModelForm, Textarea from django import forms class Author(models.Model): fname = models.CharField(max_length=100) lname = models.CharField(max_length=100) def fullname(self): return '%s %s' % (self.fname, self.lname) fullname = property(fullname) def __unicode__(self): return self.fullname class Books(models.Model): author = models.ForeignKey(Author) title = models.CharField(max_length=50) publisher = models.CharField(max_length=50) edition = models.CharField(max_length=50) comment = models.TextField() def __unicode__(self): return self.title VIEW def author_books_edit(request, author_id): a = get_object_or_404(Author, pk=author_id) authorsbooks = a.books_set.all() bookformset = inlineformset_factory(Author, Books, can_delete=True, can_order=True, exclude=('company',), extra=1) formset = bookformset(instance=a) if request.method == "POST": formset = bookformset(request.POST, request.FILES, instance=a) if formset.is_valid(): formset.save() else: form_errors = formset.errors return render_to_response('test/authors_books_edits.html', {'author': a, 'authorsbooks': authorsbooks, 'formset': formset, 'form_errors': form_errors}, context_instance=RequestContext(request)) return render_to_response('test/authors_books_edits.html', {'author': a, 'authorsbooks': authorsbooks, 'formset': formset,}, context_instance=RequestContext(request)) TEMPLATE #all errors are here {% for dict in form_errors %} {{ dict }} {% endfor %} #all forms are here, i want to pair the errors for each form {% csrf_token %} {{ formset }} UPDATED TEMPLATE: doesn't display errors {% formset.management_form %} {% csrf_token %} {% for x in formset %} {{x.errors }} {{ x }} {% endfor %}
thedeepfield
2

голосов
1

ответ
917

Просмотры

при добавлении нового инлайн к моему formset, мои datepickers перестают работать

Немного странный сегодня. Я очень простой проект. Форма и добавила к тому, что у меня есть строчная форма. Это книги авторов. Когда форма нагрузки (/ авторы / создать /) У меня есть имя автора и под меня есть форма, где я могу добавить книги этого автора. Для того, чтобы быть в состоянии иметь динамические Внутристрочные (добавлять или удалять по форме) Я использую http://code.google.com/p/django-dynamic-formset/. Моя проблема в настоящее время является то, что при добавлении нового инлайн, все мои datepickers (для даты опубликованных полей) для инлайн формы перестает работать. Я приложил свой проект образец, показывающий, что именно неправильно. Вы можете скачать и запустить его здесь. Почему и как я могу это исправить?
darren
2

голосов
1

ответ
406

Просмотры

Джанго One-To-Many модель и администратор встраивает

модель = Selector fk_name = «articles_parent_container», как описано здесь: Django встроенные формы с несколькими внешними ключами, но ошибка сейчас: (admin.E202) «news_providers.Selector» не имеет поле с именем 'articles_parent_container. Также попытался изменить мое отношение к ManyToMany (который кажется более уместным к моему потребительной случае, а) и применить хак найти здесь: http://www.mc706.com/tip_trick_snippets/18/django-manytomany-inline-admin/, но не повезло: / Это должно быть довольно прямо вперед, но я боюсь разработчиков Джанго не замечать этого случая использования? Спасибо! articles_parent_container. Также попытался изменить мое отношение к ManyToMany (который кажется более уместным к моему потребительной случае, а) и применить хак найти здесь: http://www.mc706.com/tip_trick_snippets/18/django-manytomany-inline-admin/, но не повезло: / Это должно быть довольно прямо вперед, но я боюсь разработчиков Джанго не замечать этого случая использования? Спасибо! articles_parent_container. Также попытался изменить мое отношение к ManyToMany (который кажется более уместным к моему потребительной случае, а) и применить хак найти здесь: http://www.mc706.com/tip_trick_snippets/18/django-manytomany-inline-admin/, но не повезло: / Это должно быть довольно прямо вперед, но я боюсь разработчиков Джанго не замечать этого случая использования? Спасибо!
mitsest
6

голосов
2

ответ
9.3k

Просмотры

Исходные данные для Django Инлайн FormSets

Я сколотить форму, чтобы сохранить рецепт. Она использует форму и инлайн formset. У меня есть пользователи с текстовыми файлами, содержащими рецепты, и они хотели бы, чтобы вырезать и вставить данные, чтобы сделать запись проще. Я работал, как заполнить форму части после обработки необработанного ввода текста, но я не могу понять, как заполнить встроенный formset. Похоже, что решение почти прописано здесь: http://code.djangoproject.com/ticket/12213, но я не могу достаточно положить кусочки вместе. Мои модели: # models.py от django.db импортных моделей класса Ингредиент (models.Model): название = models.CharField (MAX_LENGTH = 100, уникальный = True) класс Meta: упорядочение = [ 'название'] Защиту __unicode __ (Я) : возвращение self.title Защита get_absolute_url (Я): возвращение класс self.id Рецепт (models.Model): название = модель. 'Formset': formset}) еще: пройти обратный render_to_response ( 'рецепты / form_raw_text.html', {}) С FormSet () пустой, как описано выше, я могу успешно запустить страницу. Я попробовал несколько способов накормить formset количества, unit_of_measure и ингредиенты я идентифицированный в то числе: установление исходных данных, но это не работает для встроенного FormSets проходящего словаря, но генерирует ошибки управления формой играли с инициализацией, но я м немного из моей глубины там Любые предложения с благодарностью.
Sinidex
2

голосов
1

ответ
267

Просмотры

Настройка inline_formset отображения полей внешнего ключа

У меня есть модель под названием Access, которая связана с двумя другими моделями. Класс доступа (models.Model): portfolio_id = models.ForeignKey (Портфолио) user_id = models.ForeignKey (Пользователь) Название = models.CharField (max_length = 30, нуль = True, пусто = True) access_rights = models.PositiveIntegerField (выбор = ACCESS_CHOICES) Я создал эту форму. Класс UserAccessForm (forms.ModelForm): класс Meta: модель = Access У меня есть это в виду. AccessFormSet = inlineformset_factory (Portfolio, Access, форма = UserAccessForm, экстра = 1, can_delete = False) cAccessFormSet = AccessFormSet (экземпляр = cPorfolio) Проблема заключается в веб-странице, user_id отображается как choicefield давая мне список всех своих пользователей ( т.е. "
rc_cola15
2

голосов
2

ответ
1.6k

Просмотры

Alter поля в Django formset с помощью чистой

Как вы изменяете поля в каждой форме Django formset с использованием чистого метода? Класс MyInlineFormSet (BaseInlineFormSet): Защиту чистый (Я): если self.cleaned_data [ 'введенный'] == self.cleaned_data [ 'ответ']: self.cleaned_data [ 'is_correct'] = True возвращение self.cleaned_data Это не рабочие, и я видел, как люди перебирать каждую форму, но они только проверить и не изменять. Если я итерацию по каждой форме, как я потом вернуть cleaned_data? Другими слова: класс MyInlineFormSet (BaseInlineFormSet): Защита чистые (сам): для формы в self.forms: если form.cleaned_data [ 'введенного'] == form.cleaned_data [ 'ответ']: form.cleaned_data [ 'is_correct' ] = True ...?
ssomnoremac
2

голосов
1

ответ
231

Просмотры

Как сделать внешний ключ выглядеть как свою собственную форму вместо выпадающего меню?

Я пытаюсь создать formset для списка фильмов, как так: класс MovieList (models.Model): пользователь = models.ForeignKey (Пользователь) фильм = models.ForeignKey (фильм) Класс Movie (models.Model): жанр = models.ForeignKey (жанр) название = models.CharField (max_length = 300) MovieListFormSet = inlineformset_factory (Пользователь, MovieList) movielist_formset = MovieListFormSet (экземпляр = CurrentUser) Прямо сейчас "Фильм" появляется в раскрывающемся меню. Тем не менее, я хотел бы его так, что появляется «Movie», как пустое текстовое поле для «Movie.name», и выпадающего меню для «Movie.genre». Пользователь может ввести в название фильма в текстовом поле и выберите жанр, и если этот фильм уже существует, MovieList.movie ссылается на существующую строку таблицы, в противном случае новый MovieList строка создается и MovieList.movie ссылается на новую строку таблицы.
tkon J.
1

голосов
2

ответ
884

Просмотры

Инлайн форма проверка возвращает список пустого formset.errors

client_saved.save () client_formset.save () возвращает редирект (клиентов) еще: печать client_formset.errors остальное: печать form.errors возвращающие визуализации (запрос, 'create_client.html', { 'форма': форма, 'formset': formset }) Когда я пытаюсь представить пустое значение в formset, он выводит сообщение об ошибке в консоли, но это ничего в шаблоне не делать. Это мой шаблон: {% для поля в formset%} {{formset.management_form}} {{field.name.label}} {%, если field.instance.pk%} {{field.DELETE}} {% ENDIF% } {{field.name}} {{formset.errors}} {{field.id}} {% для спрятана в formset. hidden_fields%} {{скрыт}} {% ENDFOR%} {% ENDFOR%} {{formset.errors}} отображает [], еще до отправки формы. Что я делаю неправильно? Благодарю.
Roger Gonzalez
1

голосов
1

ответ
605

Просмотры

Django Inline formsets only saving three objects

I have a question object that has a foreign key field to a discussion object. I am trying to render a form using a discussion ModelForm, and a question Inline formset. When it renders an empty form to the page, everything works fine, and all the fields are where they need to be. The error is that I have JQuery that allows the user to add more questions if they want by appending html exactly identical to the other question inputs and labels with appropriate name values. It originally just puts three empty text areas for the question. In my view function, I save both the discussion Model form, and the Inline form with the request.POST data. I can see in the POST, that all the data, even the added questions are there, but when I redirect them to a page to see a read only version of the new discussion object and its related fields, there are always only three questions, instead of 4+. view def new_discussion(request): member = get_member(request) if request.method == 'POST': form = DiscussionForm(data=request.POST) QuestionInlineFormSet = inlineformset_factory(Discussion, Question, fields='__all__') if form.is_valid(): created_discussion = form.save(commit=False) formset = QuestionInlineFormSet(request.POST, instance=created_discussion) if formset.is_valid(): created_discussion.community = member.community created_discussion.save() formset.save() return HttpResponseRedirect('/user/discussions/') template {% extends 'member/discussions.html' %} {% block extra-head %} var count = {{ questions|length }}; $(document).ready(function(){ $('#add_question').on('click', function(e){ e.preventDefault() console.log(count) var form = $('.form-data') form.append('') $('#question-count').val(count) var extra = $('.extra-' + count) extra.append('Question:') extra.append('') extra.append('Scripture:') extra.append('') extra.append('Display order:') extra.append('') extra.append('Delete:') extra.append('') extra.append('') extra.append('') count += 1 }) }) tinymce.init({ selector: '#id_content', plugins : 'media code', media_alt_source: true, media_poster: false, media_dimensions: false }); {% endblock %} {% block discussion %} {% csrf_token %} Title {{ form.title }} Content {{ form.content }} Audio {{ form.audio }} {{ questions }} Add Question {% if view %} View {% endif %} Back to dashboard {% block discussion_nav %} {% endblock %} {% endblock %}
JBT
6

голосов
1

ответ
487

Просмотры

Django admin: Inline straight to second-level relationship

I have a three-levels Invoice model which I'd like to display on Django's admin area... in a "kind of special" way. Allow me to provide a bit of background: Each Invoice is conformed by several SubInvoice(s), and each SubInvoice is conformed by several InvoiceItem(s), which contain a break down of the Products purchased by a customer. Logically speaking, it'd be something like this (hopefully the ascii art works) +---------- Invoice id=3 -----------+ | Full total: $100.00 | | | | +----- Sub Invoice id=1 -----+ | | | Subtotal $70 | | | | | | | | Item 1 in SubInv.1 | | | | Item 2 in SubInv.1 | | | | Item 3 in SubInv.1 | | | |____________________________| | | | | +----- Sub Invoice id=2 -----+ | | | Subtotal $30 | | | | | | | | Item 1 in SubInv.2 | | | | Item 2 in SubInv.2 | | | |____________________________| | | | |___________________________________| The models look more or less (they've been simplified for this question) like: class Invoice(models.Model): full_total = DecimalField(...) # has a .sub_invoices RelatedManager through a backref from SubInvoice class SubInvoice(models.Model): sub_total = DecimalField(...) invoice = ForeignKey('server.Invoice', related_name='sub_invoices') # has an .items RelatedManager through a backref from InvoiceItem class InvoiceItem(models.Model): sub_invoice = ForeignKey('server.SubInvoice', related_name='items') product = ForeignKey('server.Product', related_name='+') quantity = PositiveIntegerField(...) price = DecimalField(...) Now, I am aware that nesting two levels of relationships in Django Admin is very complex, and I'm not trying to nest the InvoiceItem into the SubInvoice and nest that one into the Invoice. That'd be great, but I'm ready to give that up due to the difficulties of nested inlines. No: what I'd like to to do is showing the Invoice and, as an inline, its Items, "jumping" through Invoice.sub_invoices__items. I don't really care that much about the information shown in the SubInvoice(s), but I do care about the information in the Invoice and in the InvoiceItems. What I mean is that, basically, I would like (or "I could live with", rather) if the Invoice admin view looked like the following: +---------- Invoice id=3 -----------+ | Full total: $100.00 | | | | +----------------------------+ | | | | | | | Item 1 in SubInv.1 | | | | Item 2 in SubInv.1 | | | | Item 3 in SubInv.1 | | | | Item 1 in SubInv.2 | | | | Item 2 in SubInv.2 | | | |____________________________| | | | |___________________________________| (InvoiceItems as an inline of the Invoice(s) without showing any information about the SubInvoices in it) I've tried the following in the admin.py: class InvoiceItemInline(admin.StackedInline): fk_name = 'sub_invoice__invoice' model = InvoiceItem class InvoiceAdmin(admin.ModelAdmin): inlines = (InvoiceItemInline,) But that gives me an error: : (admin.E202) 'server.InvoiceItem' has no field named 'sub_invoice__invoice'. I've also tried directly this: class InvoiceItemInline(admin.StackedInline): model = InvoiceItem class InvoiceAdmin(admin.ModelAdmin): inlines = (InvoiceItemInline,) But then (this one I was expecting) produces this error: : (admin.E202) 'server.InvoiceItem' has no ForeignKey to 'server.Invoice'. Is there any way of achieving this? Thank you in advance. PS: As of now, I have a "patched" solution which seems to be the canonical way: Register the Invoice model. Register an admin.ModelAdmin inline for the SubInvoice (this inline will be "inlined" into the Invoice's ModelAdmin). Also register the SubInvoice in the admin, so we can calculate a link to its admin view. Add an inline view of the InvoiceItems to the aforementioned SubInvoice's view. Add a link to the admin view of the SubInvoice(s) in the Invoice Pretty much what is described in this other S.O. answer. But the problem with this approach is that it won't let me see the Invoice and its InvoiceItemsat a glance (I see the invoice, with sub_invoices in it, and then within the sub_invoices inlines, there's a link to the InvoiceItems which I have to click on in order to see the items). It'd be great if I could get rid of the need for that link. This is what I have now, basically: +---------- Invoice id=3 -----------+ | Full total: $100.00 | | | | +----- Sub Invoice id=1 -----+ | +--- Sub Invoice id=1 ---+ | | Subtotal $70 | | | Item 1 in SubInv.1 | | | | | | Item 2 in SubInv.1 | | | Click for items ==============> | Item 3 in SubInv.1 | | |____________________________| | |________________________| | | | +----- Sub Invoice id=2 -----+ | | | Subtotal $30 | | +--- Sub Invoice id=2 ---+ | | | | | Item 1 in SubInv.2 | | | Click for items ==============> | Item 2 in SubInv.2 | | |____________________________| | |________________________| | | |___________________________________|
BorrajaX
3

голосов
2

ответ
1k

Просмотры

Django Inline for ManyToMany generate duplicate queries

I'm experiencing some major performing issue with my django admin. Lots of duplicate queries based on how many inlines that I have. models.py class Setting(models.Model): name = models.CharField(max_length=50, unique=True) class Meta: ordering = ('name',) def __str__(self): return self.name class DisplayedGroup(models.Model): name = models.CharField(max_length=30, unique=True) position = models.PositiveSmallIntegerField(default=100) class Meta: ordering = ('priority',) def __str__(self): return self.name class Machine(models.Model): name = models.CharField(max_length=20, unique=True) settings = models.ManyToManyField( Setting, through='Arrangement', blank=True ) class Meta: ordering = ('name',) def __str__(self): return self.name class Arrangement(models.Model): machine = models.ForeignKey(Machine, on_delete=models.CASCADE) setting = models.ForeignKey(Setting, on_delete=models.CASCADE) displayed_group = models.ForeignKey( DisplayedGroup, on_delete=models.PROTECT, default=1) priority = models.PositiveSmallIntegerField( default=100, help_text='Smallest number will be displayed first' ) class Meta: ordering = ('priority',) unique_together = (("machine", "setting"),) admin.py class ArrangementInline(admin.TabularInline): model = Arrangement extra = 1 class MachineAdmin(admin.ModelAdmin): inlines = (ArrangementInline,) If I have 3 settings added on inline form and 1 extra, I have about 10 duplicate queries SELECT "corps_setting"."id", "corps_setting"."name", "corps_setting"."user_id", "corps_setting"."tagged", "corps_setting"."created", "corps_setting"."modified" FROM "corps_setting" ORDER BY "corps_setting"."name" ASC - Duplicated 5 times SELECT "corps_displayedgroup"."id", "corps_displayedgroup"."name", "corps_displayedgroup"."color", "corps_displayedgroup"."priority", "corps_displayedgroup"."created", "corps_displayedgroup"."modified" FROM "corps_displayedgroup" ORDER BY "corps_displayedgroup"."priority" ASC - Duplicated 5 times. Could someone please tell me what I'm doing wrong right here? I've spent 3 days trying to figure the problem out myself without luck. The issue gets worse when I have about 50 settings inlines of a Machine, I will have ~100 queries. Here is the screenshot
H Bui
3

голосов
1

ответ
875

Просмотры

Django inlineformset - пользовательский метод сохранения

в) Как я могу перебирать InvoiceItems и вычислить поле, которое затем нужно вставить в Invoices. Я новичок в Джанго ... Спасибо!
Mission
3

голосов
2

ответ
9.1k

Просмотры

Джанго: Aquiring формы идентификатора из formset

Я не уверен, если название описывает то, что я хочу точно. Что я хочу, чтобы добиться чего-то вроде этого: Джанго добавить / удалить форму без кратному представить. Но я не список вещей я formset и форм. Форма этого formset действительно содержит информацию я мог бы использовать для создания ссылки, как, что {% URL «item_edit»%} item-id. Проблема заключается в том, что это значение в скрытом поле. Здесь (http://docs.djangoproject.com/en/dev/topics/forms/#looping-over-the-form-s-fields) у вас есть список опций, как использовать поля формы в шаблоне, но ни один из них не является {{field.value}}. Если я пробовал, то он просто не смог молча. Тем не мение. к коду. Что я имею в шаблоне является: {{form.as_table}} {{formset.management_form}} {% для формы в formset.forms%} {%, если forloop. и я ищу какой-нибудь способ, чтобы добавить ссылку как эти Удалять или просто удалить привязки для этой точки зрения: URL (г «^ RemoveItem / (P \ d +) / $?», «remove_list_item», имя = «remove_list_item») Таким образом, есть какой-то простой способ получить этот идентификатор элемента (объект) из формы? Должен ли я создать какой-то виджет для этого удалить ссылку вместо этого? Алан.
Odif Yltsaeb
1

голосов
1

ответ
1.1k

Просмотры

Использование Django FileField в инлайн formset

имеющие проблемы, приобретающие файл для загрузки в моем приложении. Пользователь, представляет отчет и может добавлять вложения (через отношение внешнего ключа). У меня есть встроенный вид, показывающий и будет работать, если я оставить это поле пустым, но когда я пытаюсь загрузить файл затем отправить форму я получаю ошибку 500. Базовый отчет выполнен, но вложение, которое получает встраиваемое не спасется. forms.py класс REPORTFORM (forms.ModelForm): accidentDate = forms.DateField (виджет = SelectDateWidget (empty_label = ( "Выберите год", "Выберите месяц", "Выберите день"),), LABEL = (u'Accident Дата» ), начальный = часовой пояс. Вызывается, если форма является недействительной. Повторно оказывает контекстные данные с формами и ошибками данных заполненными. Args: Форма: Форма отчета report_attachment_form: Отчет Приложение Форма ""»Возвращение self.render_to_response (self.get_context_data (форма = форма, report_attachment_form = report_attachment_form)) report_form.html {% блок тела%} {% csrf_token%} {{форма. non_field_errors}} {% для поля в виде%} {% bootstrap_label field.label%} {% bootstrap_field поле show_label = False%} {% ENDFOR%} Приложения {{report_attachment_form.management_form}} {{report_attachment_form. «БТН БТН-блок БТН-первичный Окаймленный инлайн-форма-добавить», // класс CSS применяется к deleteCssClass добавить ссылку: «БТН БТН-блок БТН-первичный Окаймленный», // класс CSS применяется для удаления, AddText ссылка: ' Добавить другое вложение», // текст для deleteText добавить ссылку:„Удалить вложение выше“, // текст для стирания и formCssClass ссылки:„инлайн-форму“// класс CSS применительно к каждой форме в formset})}); {%}% Концевой блок Имея трудно понять это один из, так как он не дает мне какое-либо TRACEBACK иметь дело с, я включил ENC-тип в форме, и я передаю request.FILES в представлениях. пй файл. У меня есть загрузки файлов, работающих в нормальных формах, но рядный, оказывается проблема. Дайте мне знать, если вам нужно, чтобы я уточнить что-либо, любая помощь приветствуется :) UPDATE: Получил отслеживающий, делая CreateView CSRF освобождены с помощью @method_decorator (csrf_exempt, имя = «отправка»), который дает мне ValueError: сохранить () запрещено для предотвращения потери данных из-за неспасенный связанный «отчет» объекта. От трассы я могу видеть, что мой файл на самом деле делает его в памяти, и вопрос здесь: Будет ли продолжать обновление, как я прогресс, кажется, как этот метод сохранения объектов FK работал безупречно до 1,8, так что если мне повезет, это быстрое решение, чтобы получить объект, чтобы сохранить право. ), Который дает мне ValueError: сохранить () запрещенное для предотвращения потери данных из-за неспасенный связанный «отчет» объекта. От трассы я могу видеть, что мой файл на самом деле делает его в памяти, и вопрос здесь: Будет ли продолжать обновление, как я прогресс, кажется, как этот метод сохранения объектов FK работал безупречно до 1,8, так что если мне повезет, это быстрое решение, чтобы получить объект, чтобы сохранить право. ), Который дает мне ValueError: сохранить () запрещенное для предотвращения потери данных из-за неспасенный связанный «отчет» объекта. От трассы я могу видеть, что мой файл на самом деле делает его в памяти, и вопрос здесь: Будет ли продолжать обновление, как я прогресс, кажется, как этот метод сохранения объектов FK работал безупречно до 1,8, так что если мне повезет, это быстрое решение, чтобы получить объект, чтобы сохранить право.
mKane848
2

голосов
1

ответ
502

Просмотры

Доступ к внутреннему объекту в виде InlineModelAdmin

У меня такая проблема: я хочу, чтобы ограничить внешние ключевые выборы в инлайн модели администратора, но я хочу сделать это на основе некоторых значений, указанных в этом инлайн объекта. Как я могу получить доступ к встроенному объекту (не родительский объект) внутри методов InlineModelAdmin (в частности, в formfield_for_foreignkey (я, db_field, запрос, ** kwargs))?
andrzejdoro
2

голосов
1

ответ
7.8k

Просмотры

Джанго: встроенный formset пример из документации

Я заикнулся опробовать встроенный formset в качестве решения проблемы. Просто экспериментировал с ним в проекте песочницы. Я пытаюсь повторить тот же самый пример, как в документации Django и это не удается. :( Модели: TITLE_CHOICES = (( 'MR', 'г-н'), ( 'MRS', 'миссис'), ( 'MS', 'Мисс')) класс Автор (models.Model): Имя = models.CharField (max_length = 100) название = models.CharField (max_length = 3, выбор = TITLE_CHOICES) birth_date = models.DateField (пустой = True, нуль = True) защиту __unicode __ (Я): возвращение self.name класс Book ( models.Model): имя = models.CharField (max_length = 100) авторы = models.ManyToManyField (Автор) ** Вид: Защита manage_books (запрос, author_id): автор = Author.objects. получить (рк = author_id) BookInlineFormSet = inlineformset_factory (Автор, книга), если request.method == "POST": formset = BookInlineFormSet (request.POST, request.FILES, экземпляр = автор), если formset.is_valid (): formset.save () # Сделай что-нибудь. Если обычно заканчиваются редиректа. Например: возвращение HttpResponseRedirect (author.get_absolute_url ()) еще: formset = BookInlineFormSet (экземпляр = автор) обратный render_to_response ( "manage_books.html", { "formset": formset,}) В окне администратора я успешно создал Author1 и Author2. Книга1 и Book1b назначены Author1 Book2 в Author2. Когда я пытаюсь это я получаю не ForeignKey к TraceBack: Окружающая среда: Запрос Метод: GET запрос URL: http://127.0.0.1:8000/test/1 Джанго Версия: 1. ответ = обратного вызова (запрос, * callback_args ** callback_kwargs) Файл "/home/houman/projects/Sandbox/Sandbox_App/views.py" в manage_books 58. BookInlineFormSet = inlineformset_factory (Автор,) Файл «/ USR / местные / Библиотека /python2.7/dist-packages/django/forms/models.py "в inlineformset_factory 817. Fk = _get_foreign_key (parent_model, модель, fk_name = fk_name) Файл" /usr/local/lib/python2.7/dist-packages/ Джанго / формы / models.py»в _get_foreign_key 800. повышают Exception ( "% s не имеет ForeignKey на% s" % (модель, parent_model)) Тип исключения: Исключение в / тест / 1 Исключение Значение: не имеет ForeignKey к Почему это не работает? Большое спасибо в manage_books 58. BookInlineFormSet = inlineformset_factory (Автор,) Файл "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" в inlineformset_factory 817. Fk = _get_foreign_key (parent_model, модель, fk_name = fk_name) Файл "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" в _get_foreign_key 800. рейз Exception ( "% s не имеет ForeignKey к% s" % (модель, parent_model )) Тип исключения: не исключение в / тест / 1 Exception Значение: уже не ForeignKey к Почему это не работает? Большое спасибо в manage_books 58. BookInlineFormSet = inlineformset_factory (Автор,) Файл "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" в inlineformset_factory 817. Fk = _get_foreign_key (parent_model, модель, fk_name = fk_name) Файл "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" в _get_foreign_key 800. рейз Exception ( "% s не имеет ForeignKey к% s" % (модель, parent_model )) Тип исключения: не исключение в / тест / 1 Exception Значение: уже не ForeignKey к Почему это не работает? Большое спасибо
Houman
3

голосов
1

ответ
1.6k

Просмотры

formset, inlineformset_Factory и kwargs

У меня есть пара моделей позволяет называть их модель А и модель B. Существует внешний ключ к А из В. То есть мощность между А и В 1: п. Я сделал соответствующий ModelForm для B называется MF_B. У меня есть дополнительное поле, я определяю в Б., например, класс MF_B (forms.ModelForm): материал = forms.MultipleChoiceField (QuerySet = None, требуется = False) класс Meta: модель = B, как описано выше код подразумевает, я хочу, чтобы заполнить выбор здесь с QuerySet. (Я опустил код переопределения в Init (), который мы будем использовать, чтобы установить QuerySet на поле вещи) Сделка Я хочу использовать inlineformset_factory создать на одной странице форму с А и несколько форм с Б. Я хотел просто передать кучу новых kwargs в inlineformset_factory но он продолжал complaing об аргументах неожиданных ключевых слов и после того, как глядя на код серверной в Джанго, Я понимаю, почему: inlineformset_factory не принимает пользовательские kwargs. он принимает только kwargs определенные в методе сиг. Защиту inlineformset_factory (parent_model, модель, форма = ModelForm, formset = BaseInlineFormSet, fk_name = None, поля = Нет, не исключает = None, дополнительное = 3, can_order = False, can_delete = True, MAX_NUM = None, formfield_callback = None): Я надеваю «т думаю канский использовать formfield_callback, потому что мне нужно передать self.request.user фильтровать объекты, которые возвращаются в QuerySet. какие-либо предложения? не поля = Нет, не исключает = None, дополнительное = 3, can_order = False, can_delete = True, MAX_NUM = None, formfield_callback = None): Я не думаю, что канский использовать formfield_callback, потому что мне нужно пройти self.request.user фильтровать объекты возващайтесь в QuerySet. какие-либо предложения? не поля = Нет, не исключает = None, дополнительное = 3, can_order = False, can_delete = True, MAX_NUM = None, formfield_callback = None): Я не думаю, что канский использовать formfield_callback, потому что мне нужно пройти self.request.user фильтровать объекты возващайтесь в QuerySet. какие-либо предложения?
w--
2

голосов
0

ответ
2.3k

Просмотры

Джанго Инлайн FormSets с формой wizard¶

У меня есть две модели, второй имеют по ForeignKeyto первый. Я использую Django форму Wizzard для комплектных много перегруппировки полей, разделенных шагов. Проблема заключается в том, когда я приезжаю в «» шаге командного игрока, где я должен позволить пользователю вводить много членов. Я думал использовать Django Инлайн formset, но я не могу реализовать его в моем Мастере форм, я получаю [данные u'ManagementForm отсутствуют или были изменены с '] ошибкой при попытке отобразить этот шаг. Вот моя реализация, если кто-нибудь есть какие-либо идеи, было бы очень признателен :). Не стесняйтесь связаться со мной, если вам нужно больше информации. Заранее спасибо за помощь. Yann класс models.py Team (models.Model): имя = имя = models.CharField (_ (u'Team '), max_length = 50)) класс (models.Model командного игрока): команда = модели.
yann
2

голосов
2

ответ
3.6k

Просмотры

Custom formset templates in Django

I am using a Django formset for this model: class Book(models.Model): book_id=models.AutoField(primary_key=True,unique=True) book_name=models.CharField(max_length=30) publisher_name=models.CharField(max_length=40) author=models.ForeignKey(Author) The formset is defined thus: BookFormset = inlineformset_factory(Author, Book, fields=('book_id','book_name', 'publisher_name'), extra=1, can_delete=False) The template is: {{ formset.non_form_errors.as_ul }} {% for form in formset.forms %} {% if forloop.first %} {% for field in form.visible_fields %} {{ field.label|capfirst }} {% endfor %} {% endif %} {% for field in form.visible_fields %} {# Include the hidden fields in the form #} {% if forloop.first %} {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} {% endif %} {{ field.errors.as_ul }} {{ field }} {% endfor %} {% endfor %} The fields are displayed column-wise, but I would like them to be displayed row-wise. The above code produces output like this: Book name Publisher name book_field Publisher_field I would like the output to look like this: Book name book_field Publisher name Publisher_field How can I do this?
user2086641

Просмотр дополнительных вопросов