Django возможность добавлять и удалять внешние ссылки на модели через django admin - PullRequest
0 голосов
/ 21 января 2020

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

    from django.db import models


# Create your models here.

class Product(models.Model):
    product_name = models.CharField(max_length=128)

    def __str__(self):
        return self.product_name


class ProductBundle(models.Model):
    bundle_name = models.CharField(max_length=128)
    product_dependencies = models.ForeignKey(Product, related_name="add_product",
                                             on_delete=models.CASCADE)

    def __str__(self):
        return self.bundle_name

enter image description here

В настоящее время это список со всеми продуктами, которых я не пытаюсь достичь. Многие посты говорят о добавлении поля related_name для достижения этой цели, но по какой-то причине это не работает для меня

1 Ответ

0 голосов
/ 22 января 2020

Ответ:

Короче говоря, я должен был использовать поле «многие ко многим». Я также загружал стандартное представление django admin, которое отображает все сохраненные ссылки (не добавлены)

в admin.py

from django.contrib import admin
from .models import Product, ProductDependency

# Register your models here.
admin.site.register(Product)


class ProductDependencyAdmin(admin.ModelAdmin):
    filter_horizontal = ('product_dependencies',)


admin.site.register(ProductDependency, ProductDependencyAdmin)

и models.py

из django .db импорт моделей import uuid

# Create your models here.

class Product(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    product_name = models.CharField(max_length=128)

    def __str__(self):
        return self.product_name


class ProductDependency(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    product = models.ForeignKey(Product, on_delete=models.DO_NOTHING, related_name='product')
    product_dependencies = models.ManyToManyField('Product')

    def __str__(self):
        return self.product.__str__()
...