- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 DjangoRest Framework 和 2 个模型 DeviceType 和 Channel。现在,Channel 有一个指向DeviceType 的ForeignKeyField。到目前为止没有问题。但现在我不希望在添加或编辑 channel 时选择所有DeviceTypes,而是只选择具有usesChannels的DeviceTypes 字段设置为 True。所以我使用了 limit_Choices_to 属性,但不知何故这似乎不起作用。无论我做什么,我总是会得到一个包含所有 DeviceTypes 的列表,包括 usesChannels 设置为 False
的列表这是我的代码:
models.py
class DeviceType(models.Model):
name = models.CharField(max_length=30)
usesChannels = models.BooleanField()
def __str__(self):
return '%s' % (self.name)
class Channel(models.Model):
type = models.ForeignKey(DeviceType, limit_choices_to={'usesChannels': True})
name = models.CharField(max_length=30)
channelNr = models.IntegerField()
序列化器.py
class DeviceTypeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = DeviceType
fields = ('url', 'name', 'usesChannels')
class ChannelSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Channel
flieds = ('url', 'type', 'name', 'channelNr')
我使用了This link中的ForeignKey.limit_choices_to示例
编辑:我使用 DRF 可浏览 API 来添加、编辑和删除数据。
答案:经过几天的努力,我找到了一个可行的解决方案:
models.py
class DeviceType(models.Model):
name = models.CharField(max_length=30)
usesChannels = models.BooleanField()
def __str__(self):
return '%s' % (self.name)
class Channel(models.Model):
type = models.ForeignKey(DeviceType)
name = models.CharField(max_length=30)
channelNr = models.IntegerField()
序列化器.py
class DeviceTypeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = DeviceType
fields = ('url', 'name', 'usesChannels')
class ChannelSerializer(serializers.HyperlinkedModelSerializer):
type = serializers.PrimaryKeyRelatedField(queryset=DeviceType.objects.filter(usesChannels=True))
class Meta:
model = Channel
flieds = ('url', 'type', 'name', 'channelNr')
编辑:为了完整起见,我也会添加 View
Views.py:
class DeviceTypeViewSet(viewsets.ModelViewSet):
queryset = DeviceType.objects.all()
serializer_class = DeviceTypeSerializer
class ChannelViewSet(viewsets.ModelViewSet):
queryset = Channel.objects.all()
serializer_class = ChannelSerializer
最佳答案
今天遇到这个问题。我相信它确实完全忽略了该属性;至少我在 DRF 的代码中找不到任何对它的引用。
所以我通过添加 Serializer.__init__
构造函数并在其中添加以下函数/代码来“解决”问题:
class MySerializer(Serializers.Serializer):
def __init__(self, *args, **kwargs):
...
def limit_choices_to(field_name):
fld = self.fields[field_name]
fld.queryset = fld.queryset.filter(**Flight._meta.get_field(field_name).get_limit_choices_to())
limit_choices_to('my_field')
关于djangorest框架limit_choices_to属性被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39336668/
这是正确的吗? class Customer(models.Model): account = models.ForeignKey(Account) class Order(models.Mo
如果有必要按另一个模型的字段进行限制,您能否帮助我了解限制选择在模型中的工作原理。目前,我有两个模型: 组: class Group(models.Model): name = models.
鉴于这两种模型,我希望我的 url FK(在 ClientKeyword 中)仅显示其客户端等于当前 ClientKeyword 客户端的 url。 我应该在 limit_choices_to 中放入
我试图通过检查“share_holder”和“distributor”两列的值来限制字段的选择。如果其中任何一个是真的,那么我想要那个选择。 在以下版本中,我只有满足两个条件的选择('share_ho
我正在运行 Django 1.1,无法让“limit_choices_to”选项让我的 ManytoManyField 正常工作。 我有两个模型: class MemberPhoto(ImageMod
我想在管理 UI 中使用 limit_choices_to 限制外键的选择;但是,我想在不更改模型的情况下实现这一点,因为模型是从库中引入的,我无法控制。动态实现这一目标的方式是什么?或者我可以使用管
我的 Django 数据库有两个模型:DeviceModel 和 Device。比方说,DeviceModel 对象是“LCD panel”,Device 对象是“LCD panel №547”。所以
我正在尝试在 Django OneToOneField 中使用“limit_choices_to”功能,其中我想要限制选择的上游是另一个外键。我在管理员中设置的方式遇到的错误是: invalid li
例如: class Foo(models.Model): bar = models.OneToOneField( 'app.Bar', limit_choice
我有两个类System和Station,它们继承自Base。 Base 类具有 Group 的外键,Station 具有System 的外键。 我正在尝试对后一个 FK 施加“limit_choice
我查看了所有文档,还访问了 IRC channel (顺便说一句,这是一个很棒的社区),他们告诉我,不可能在“当前用户”所在的字段中创建模型和限制选择外键。我将尝试用一个例子来解释这一点: class
如何在“limit_choices_to”中指定“NOT IN”?我只想获取所有客户详细信息,除非他们处于一种特定状态。 customer = models.ForeignKey(Customer,
我有两个模型Project 和Group。我的小组属于一个特定的项目。我的组有字段 project =foreignKey(Project) 和 parent =foreignKey('self')。
这是模型。我需要避免在 FilterValue 模型中引用 Filter 对象,这些对象已在 FilterValue 模型中引用。 class Filter(models.Model):
我是 Django 的新手,刚刚完成了第一个应用程序的制作教程。我有一个关于外键的问题 在 models.py 中我有两个类(class),分别称为 Post 和 GroupMeeting。在小组 s
我担心我想做的事情可能是不可能的,但我们开始吧: 在我的模型中,我有以下 Class ParentCategory(models.Model): name = models.CharField
我有一段代码如下: 模型.py class Notebook(models.Model): owner = models.ForeignKey(User, on_delete = models
我有几个看起来像这样的 django 模型: from django.contrib.sites.models import Site class Photo(models.Model): t
我有一种情况,我希望利用 Django 的自动完成管理小部件,它遵守引用模型字段限制。 例如我有以下 Collection具有属性 kind 的模型具有指定的选择。 class Collection(
我正在尝试使用 limit_choices_to 来限制 Django 管理员对 ForeignKey 的选择,但我不知道如何正确地做到这一点。 如果类别 ID 为 16,此代码将执行我想要的操作,但
我是一名优秀的程序员,十分优秀!