Невозможно получить многие ко многим всем объектам в django

когда я пытаюсь получить все элементы корзины из модели заказа, затем нажимаю открыть страницу редактирования модели элемента корзины, но я получаю только первый элемент корзины, так что что не так в моем коде

Admin Model

class OrderAdmin(admin.ModelAdmin):
list_display = ('user', 'total_price', 'ordered',
                'get_address', 'get_cart')

def get_cart(self, obj):
    for p in obj.items.all():
        app_label = p._meta.app_label
        model_label = p._meta.model_name
        url = reverse(
            f'admin:{app_label}_{model_label}_change', args=(p.id,)
        )
        return mark_safe(f'<a href="{url}">{p.item}</a>')

get_cart.allow_tags = True
get_cart.short_description = "Cart"

Модель заказа

class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
items = models.ManyToManyField(CartItem,)
ordered = models.BooleanField(default=False)
total_price = models.FloatField(default=0)
start_date = models.DateTimeField(auto_now_add=True)
payment_id = models.CharField(null=True, blank=True, max_length=100)
ordered_date = models.DateTimeField()

address = models.ForeignKey(
    Address, on_delete=models.DO_NOTHING, blank=True, null=True)

class Meta:
    ordering = ['-ordered_date']

def __str__(self):
    return str(self.user.username) + ' '+str(self.total_price)

def user_link(self):
    return '<a href="%s">%s</a>' % (reverse("admin:auth_user_change", args=(self.user.id,)), escape(self.user))

Ваш цикл в get_cart возвращается после обработки первого объекта.

Перед возвратом можно построить безопасную строку с нужными ссылками, например:

def get_cart(self, obj):
    x = []

    for p in obj.items.all():
        app_label = p._meta.app_label
        model_label = p._meta.model_name
        url = reverse(
            f'admin:{app_label}_{model_label}_change', args=(p.id,)
        )

        x.append(f'<a href="{url}">{p.item}</a>')   

    x = ' | '.join(x)
    x = mark_safe(x)
        
    return x
Вернуться на верх