【问题标题】:cannot retrieve many to many all objects in django无法在 django 中检索多对多的所有对象
【发布时间】:2021-12-29 07:00:25
【问题描述】:

当我尝试从订单模型中检索所有购物车项目然后单击以打开购物车模型编辑页面但我只有第一个购物车项目所以我的代码有什么问题

管理模式

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))

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2017-09-08
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多