Я довольно новичок в Django, но мне интересно, как заставить одну, казалось бы, очевидную вещь работать в определениях моей модели.
Для модели "Продукт" я хочу иметь возможность добавлять любое количество ссылокТаким образом, я сделал более-менее общую модель «Ссылка» с полем отображаемого имени и полем URL.В Product я добавляю это как ManyToManyField
с соответствующей моделью Link.
Это работает так, как задумано в представлении администратора, так как я могу добавить любое количество ссылок и сделать это встроенным.Однако я только хочу, чтобы в представлении администратора были перечислены существующие ссылки этого продукта, чтобы пользователь мог удалить их, а пользователь мог добавить новые.Я не хочу, чтобы в поле встроенной ссылки отображались все ссылки на другие продукты.
Не понимаю ли я тип поля или общий подход, или как я могу заставить это работать?Мне было интересно, если варианты с по это способ сделать это, или это просто то, что вы должны делать в формах администратора, а не на уровне модели?
Редактировать:Пример кода добавлен ниже
Редактировать: Пример кода обновлен с formfield_for_manytomany
In models.py
:
class Product(models.Model):
name = models.CharField(max_length=256)
links = models.ManyToManyField('Link', related_name='links', default=None, blank=True, null=True)
class Link(models.Model):
name = models.CharField(max_length=256)
url = models.URLField(max_length=256)
In admin.py
:
class LinksInline(admin.StackedInline):
model = Link
class ProductAdmin(admin.ModelAdmin):
inlines = [LinksInline]
def formfield_for_manytomany(self, db_field, request, **kwargs):
kwargs["queryset"] = Link.objects.filter(font_id=self.object_id)
return super().formfield_for_manytomany(db_field, request, **kwargs)
admin.site.register(Link)
admin.site.register(Product)