从django管理表单中的编辑表单一对一关系中排除分配的对象
Exclude assigned objects from edit form one to one relationship in django admin forms
我有两个模型,名为 RecId
和 Record
,一对一关系,
models.py
class RecId(models.Model):
rec_id = models.CharField(max_length=255)
def __str__(self):
return str(self.rec_id)
class Record(models.Model):
rec_id = models.OneToOneField(RecId, on_delete=models.CASCADE, null=True, blank=True)
desc = models.TextField()
user = models.ForeignKey(UserAccount, on_delete=models.CASCADE)
def __str__(self):
return str(self.rec_id)
我的问题是,
默认情况下,django admin 记录编辑表单编辑字段(RecId字段)显示RecId
table中的所有rec_ids
。但是我只需要显示可以分配给一条Record的记录(因为两个table之间的关系是OneToOne,一个id只能分配给一个记录)
我尝试使用 formfield_for_foreignkey()
方法来做到这一点,但目前仍坚持查询
admin.py
@admin.register(Record)
class RecordAdmin(admin.ModelAdmin):
list_display = ['rec_id', 'desc', 'user']
search_fields = ['rec_id', 'user']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "rec_id":
kwargs["queryset"] = RecId.objects.all().exclude(... The query ...)
return super(RecordAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
我在一两个小时前尝试使用 ~Exists(Record.objects.filter(rec_id__eq=OuterRef('pk')))
查询它,但没有成功。所以非常感谢任何帮助。
好的,明白了:)
查询应该是 RecId.objects.filter(record__isnull=True)
所以 admin.py 看起来像
@admin.register(Record)
class RecordAdmin(admin.ModelAdmin):
list_display = ['rec_id', 'desc', 'user']
search_fields = ['rec_id', 'user']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "rec_id":
kwargs["queryset"] = RecId.objects.all().exclude(
RecId.objects.filter(record__isnull=True)
)
return super(RecordAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
我有两个模型,名为 RecId
和 Record
,一对一关系,
models.py
class RecId(models.Model):
rec_id = models.CharField(max_length=255)
def __str__(self):
return str(self.rec_id)
class Record(models.Model):
rec_id = models.OneToOneField(RecId, on_delete=models.CASCADE, null=True, blank=True)
desc = models.TextField()
user = models.ForeignKey(UserAccount, on_delete=models.CASCADE)
def __str__(self):
return str(self.rec_id)
我的问题是,
默认情况下,django admin 记录编辑表单编辑字段(RecId字段)显示RecId
table中的所有rec_ids
。但是我只需要显示可以分配给一条Record的记录(因为两个table之间的关系是OneToOne,一个id只能分配给一个记录)
我尝试使用 formfield_for_foreignkey()
方法来做到这一点,但目前仍坚持查询
admin.py
@admin.register(Record)
class RecordAdmin(admin.ModelAdmin):
list_display = ['rec_id', 'desc', 'user']
search_fields = ['rec_id', 'user']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "rec_id":
kwargs["queryset"] = RecId.objects.all().exclude(... The query ...)
return super(RecordAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
我在一两个小时前尝试使用 ~Exists(Record.objects.filter(rec_id__eq=OuterRef('pk')))
查询它,但没有成功。所以非常感谢任何帮助。
好的,明白了:)
查询应该是 RecId.objects.filter(record__isnull=True)
所以 admin.py 看起来像
@admin.register(Record)
class RecordAdmin(admin.ModelAdmin):
list_display = ['rec_id', 'desc', 'user']
search_fields = ['rec_id', 'user']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "rec_id":
kwargs["queryset"] = RecId.objects.all().exclude(
RecId.objects.filter(record__isnull=True)
)
return super(RecordAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)