相关疑难解决方法(0)

在admin中以内联形式限制select中的外键选项

该模型的逻辑是:

  • A Building有很多Rooms
  • A Room可能在另一个内部Room(例如,一个壁橱 - 在'self'上的ForeignKey)
  • A Room只能Room在同一建筑物内的另一个内部(这是棘手的部分)

这是我的代码:

#spaces/models.py
from django.db import models    

class Building(models.Model):
    name=models.CharField(max_length=32)
    def __unicode__(self):
        return self.name

class Room(models.Model):
    number=models.CharField(max_length=8)
    building=models.ForeignKey(Building)
    inside_room=models.ForeignKey('self',blank=True,null=True)
    def __unicode__(self):
        return self.number
Run Code Online (Sandbox Code Playgroud)

和:

#spaces/admin.py
from ex.spaces.models import Building, Room
from django.contrib import admin

class RoomAdmin(admin.ModelAdmin):
    pass

class RoomInline(admin.TabularInline):
    model = Room
    extra = 2

class BuildingAdmin(admin.ModelAdmin):
    inlines=[RoomInline]

admin.site.register(Building, BuildingAdmin)
admin.site.register(Room)
Run Code Online (Sandbox Code Playgroud)

内联将仅显示当前建筑物中的房间(这是我想要的).但问题是,对于inside_room下拉列表,它会显示Rooms表中的所有房间(包括其他建筑物中的房间).

在内联中rooms,我需要将inside_room选择限制rooms在当前building(当前正由主BuildingAdmin …

django inline admin foreign-keys limit

69
推荐指数
7
解决办法
3万
查看次数

型号limit_choices_to = {'用户':用户}

我去了所有的文档,我也去了IRC频道(BTW一个伟大的社区),他们告诉我,在"当前用户"在ForeignKey中的字段中创建模型并限制选择是不可能的.我将尝试用一个例子解释这个:

class Project(models.Model):
  name = models.CharField(max_length=100)
  employees = models.ManyToManyField(Profile, limit_choices_to={'active': '1'})

class TimeWorked(models.Model):
  project = models.ForeignKey(Project, limit_choices_to={'user': user})
  hours = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)

当然这段代码不起作用,因为没有'用户'对象,但这是我的想法,我试图将对象'用户'发送到模型,只是限制当前用户有项目的选择,我不我不想看到我不在的项目.

非常感谢你,如果你可以帮助我或给我任何建议,我不想你写所有的应用程序,只是一个提示如何处理.我有2天的时间在脑海中,我无法弄清楚:(

更新:解决方案在这里:http://collingrady.wordpress.com/2008/07/24/useful-form-tricks-in-django/发送request.user到模型.

python django model

12
推荐指数
2
解决办法
1万
查看次数

如何在django ModelAdmin.autocomplete_fields中限制自动完成搜索结果的外键对象?

根据这个答案,我能够过滤外键选择:

在此输入图像描述

但是当我将spm标记为autocomplete_field:时autocomplete_fields = ['spm'],spm字段从选择字段变为自动完成搜索字段: 在此输入图像描述

但外键选择不再受"formfield_for_foreignkey"中配置的限制.

即使我在formfield_for_foreignkey方法中附加小部件,spm自动完成选项也会受到限制:

@admin.register(CustomModel)
class CustomModelAdmin(admin.ModelAdmin):

    #autocomplete_fields = ['spm']
    search_fields = ['name']

    def get_form(self, request, obj=None, **kwargs):
        request.current_object = obj
        return super(CustomModelAdmin, self).get_form(request, obj, **kwargs)

    def formfield_for_foreignkey(self, db_field, request, **kwargs):

        if db_field.name == 'spm':
            instance = request.current_object
            if instance.brand and instance.memory_size:
                    filtered_qs=StandardProductWithMemorySize.objects.filter(
                        product__brand=instance.brand,
                        memory_size=instance.memory_size
                    )
                    kwargs['queryset'] = filtered_qs
                    db = kwargs.get('using')
                    kwargs['widget'] = AutocompleteSelect(db_field.remote_field, self.admin_site)
        return super(
            CustomModelAdmin, self
        ).formfield_for_foreignkey(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)

django django-admin

5
推荐指数
1
解决办法
817
查看次数

标签 统计

django ×3

admin ×1

django-admin ×1

foreign-keys ×1

inline ×1

limit ×1

model ×1

python ×1