Django中ForeignKey参数的使⽤
limit_choices_to:
from django.db import models
dels import User
from dels import Q
class Book(models.Model):
name = models.CharField(max_length=20)
user = models.ForeignKey(User, limit_choices_to={'is_staff': True})
#user = models.ForeignKey(User, limit_choices_to=Q(is_staff=True))
def __unicode__(self):
return self.name
>>>Book.objects.filter(user=u)
>>>User.objects.filter(Book__name__startswith='hhh')
limit_choices_to可以使⽤字典的形式来表⽰,也可以⽤Q来表⽰,如上实例所⽰。
但是当使⽤Q的形式来表⽰时,那么⽤到limit_choices_to的字段就不要出现在raw_id_fields中,否则将会失效。⽽字典的形式照常⽣效。
class BookAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'user']
raw_id_fields = ('user',)
ister(Book, BookAdmin)
这样的话,limit_choices_to的作⽤就会失效。
related_name:
django admin 自定义页面当⼀张表的多个字段指向同⼀张表时,会出错。系统⽆法知道,通过另外⼀张表,访问XXX_set属性访问到的是哪个属性。这时,我们就需要为每个字段定义⼀个related_name属性,另外⼀张表访问这个表时,就会根据related_name的值来得到各个属性了。
例⼦:
当定义了related_name后”_set”这类查询就被related_name代替了,所以⽤”_set”会报错。
如果related_name=‘+’或者以‘+’结束:‘user+',那么就⽆法实现逆向查询了。
参数描述
edit_inline 若取值⾮假, 这个关联对象就是可内联编辑的.这也意味着这个对象没有⾃⼰的管理界⾯.取值可以是 models.TABULAR 或models.STACKED, 分别表⽰内联可编辑对象是显⽰成表格形式还是⼀个字段集栈的形式.
limit_choices_to ⼀个参数和值的字典(参阅`数据库API参考`_)⽤来限制 admin 针对该对象的可选项. 使⽤models.LazyDate 值来按⽇期限制该对象的选择项,举例来说:
limit_choices_to = {'pub_date__lte' : models.LazyDate()}
只允许关联对象的pub_date在当前⽇期之前的才可以被选择.本参数与 edit_inline 不相容.
max_num_in_admin 对内联编辑对象来说,这是在 amdin 中可显⽰的关联对象的最⼤值. 这样, 如果说⼀只⽐萨饼最多加10种浇头,那么max_num_in_admin=10 将确保没有⼀个超过⼗种.
这并不说是⽐萨斜塔只有⼗层⾼...⽐萨斜塔是可以有更多层的.这个参数仅仅控制admin界⾯.
min_num_in_admin 在admin中显⽰的关联对象的最⼩值. 正常情况,在创建阶段显⽰ num_in_admin 个内联对象, 在编辑阶段,除了预先存在的关联对象外, 显⽰ num_extra_on_change 个空对象.不过, ⽆论何种情况,⾄少会有 min_num_in_admin 个关联对象被显⽰出来.
num_extra_on_change在编辑阶段显⽰的额外的空⽩关联对象字段数. num_in_admin在添加⼀个对象时显⽰的其内联对象的默认数量
raw_id_admin 为即将得到的整数值(id值)显⽰⼀个⽂本框⽽不是⼀个下拉菜单. 在关联对象有很多很多⾏时.使⽤它就⽐使⽤⼀个<select> 更实⽤.
不能与 edit_inline ⼀起使⽤.
related_name 关系名字. 举例来说, 如果 Topping 对象拥有字段:
models.ForeignKey(Pizza)
related_name 将会是 "topping_set" (取⾃类的名字), Pizza 对象会⾃动拥有 topping_set对象集描述符.
不过若你在 Topping 类中做如下定义的话:
models.ForeignKey(Pizza, related_name="munchie")
则 Topping 的对象集描述符就变为 munchie.
只有当⼀个对象要被另⼀个对象关联不⽌⼀次时, 这个参数才真正有⽤. 举例来说, 如果⼀个Story 对象既有primary_category 字段⼜有 secondary_category 字段. 为了确保Category 对象拥有正确的对象集描述符,你要这样使⽤这些字段.:
models.ForeignKey(Category, related_name="primary_storys") models.ForeignKey(Category,
related_name="secondary_storys")
...这样 Category 对象才会⾃动拥有 primary_storys 和 secondary_storys 对象集描述符.
to_field被关联对象的⽤于关联的字段. 默认情况, Django 使⽤被关联对象的主键参数描述
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论