Django - Inline - Search For Existing Record Instead Of Adding A New One
I have a library with shelves and books. I point each book to one shelf in a one-to-many relationship. If a book is pointing to a Null it means that it's in the library, but not in
Solution 1:
Hi the following code worked for me:
from widgets importImproveRawIdFieldsFormclassBookInline(admin.TabularInline):
model = Book
raw_id_fields=('shelf',)
extra =1classShelf(ImproveRawIdFieldsForm):
inlines = [BookInline,]
It creates an admin view where you will se the normal Shelf stuff and the additional inline which is a raw id field and you have the posssibility to add new relations and you can chose from existing objects with the "magnifier" icon, which results in a pop-up of a list of all existing books. Besides chose one Book in the pop-up you can also create new Books there. So from my understanding this solves all your requirements
a better solution for this problem is explained here: one-to-many inline select with django admin
edited for your use-case:
#models.pyclassBook(models.Model):
shelf = models.ForeignKey(Shelf, blank=True, null=True, related_name="in_shelf")
#admin.pyclassShelfForm(forms.ModelForm):
classMeta:
model = Shelf
books = forms.ModelMultipleChoiceField(queryset=Book.objects.all())
def__init__(self, *args, **kwargs):
super(ShelfForm, self).__init__(*args, **kwargs)
if self.instance:
if self.instance.in_shelf:
self.fields['books'].initial = self.instance.in_shelf.all()
else:
self.fields['books'].initial = []
defsave(self, *args, **kwargs):
instance = super(ShelfForm, self).save(commit=False)
self.fields['books'].initial.update(shelf=None)
self.cleaned_data['books'].update(shelf=instance)
return instance
Post a Comment for "Django - Inline - Search For Existing Record Instead Of Adding A New One"