相关疑难解决方法(0)

Django admin inline:select_related

在Python 3.4.1上使用带有模型的Django 1.8:

class Product(models.Model):
    name = models.CharField(max_length=255)
    # some more fields here

    def __str__(self):
        return self.name


class PricedProduct(models.Model):
    product = models.ForeignKey(Product, related_name='prices')
    # some more fields here

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

class Coming(models.Model):
    # some unimportant fields here


class ComingProducts(models.Model):
    coming = models.ForeignKey(Coming)
    priced_product = models.ForeignKey(PricedProduct)
    # more unimportant fields
Run Code Online (Sandbox Code Playgroud)

和以下admin.py:

class ComingProductsInline(ForeignKeyCacheMixin, admin.TabularInline):
    model = ComingProducts


class ComingAdmin(admin.ModelAdmin):
    inlines = [ComingProductsInline]
Run Code Online (Sandbox Code Playgroud)

当然,我遇到了对数据库进行多次查询的问题:我对列表中的每个项目进行查询,并对每一行进行查询.所以,有100个项目,我得到100 ^ 2个查询.我已经用Django表单中的ModelChoiceField或ModelMultipleChoiceField的缓存查询集选项解决了每行查询的问题 但是我仍然遇到str方法的问题.我尝试过以下方法:

1)将prefetch_related添加到ComingAdmin:

def get_queryset(self, request):
    return super(ComingAdmin, self).get_queryset(request). …
Run Code Online (Sandbox Code Playgroud)

python django admin foreign-keys django-queryset

10
推荐指数
4
解决办法
6734
查看次数

Django Inline for ManyToMany生成重复查询

我的django管理员遇到了一些重大的性能问题.根据我有多少内联,有很多重复的查询.

models.py

class Setting(models.Model):
    name = models.CharField(max_length=50, unique=True)

    class Meta:
        ordering = ('name',)

    def __str__(self):
        return self.name


class DisplayedGroup(models.Model):
    name = models.CharField(max_length=30, unique=True)
    position = models.PositiveSmallIntegerField(default=100)

    class Meta:
        ordering = ('priority',)

    def __str__(self):
        return self.name


class Machine(models.Model):
    name = models.CharField(max_length=20, unique=True)
    settings = models.ManyToManyField(
        Setting, through='Arrangement', blank=True
    )

    class Meta:
        ordering = ('name',)

    def __str__(self):
        return self.name


class Arrangement(models.Model):
    machine = models.ForeignKey(Machine, on_delete=models.CASCADE)
    setting = models.ForeignKey(Setting, on_delete=models.CASCADE)
    displayed_group = models.ForeignKey(
        DisplayedGroup, on_delete=models.PROTECT,
        default=1)
    priority = models.PositiveSmallIntegerField(
        default=100,
        help_text='Smallest number will …
Run Code Online (Sandbox Code Playgroud)

django duplicates django-queryset inline-formset

3
推荐指数
2
解决办法
1614
查看次数