Невозможно получить многие ко многим всем объектам в 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