在django admin开发的时候,在添加数据的时候,发现了下图的问题。项目id是BimFaceModel的外键,所以在添加数据的时候显示出来是如下的样子,如何把它改成项目名呢?
只要在外键对应的类中添加
__str__()
函数就好了!在我这里对应的是
Project
类:
class Project(models.Model):
class Meta:
verbose_name = '项目管理'
verbose_name_plural = verbose_name
def __str__(self):
return self.project_name
users = models.ManyToManyField(SysUser, null=True, blank=True)
project_id = models.AutoField("项目id", primary_key=True)
project_name = models.CharField("项目名", max_length=255)
project_description = models.TextField("项目描述", null=True, blank=True)
结果如下,over over!
在django admin开发的时候,在添加数据的时候,发现了下图的问题。项目id是BimFaceModel的外键,所以在添加数据的时候显示出来是如下的样子,如何把它改成项目名呢?
class BlogArticleAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "sort_id":
kwargs["queryset"] = T
django 1.8.4
错误内容:related Field has invalid lookup: icontains
我原来默认认为在处理外键搜索的时候,django会自动将该外键的行数据以str()化之后进行搜索,但其实并不是这样的,如果将外键加入到搜索域中,需要明确写出来。
这个是我从网上查到的解决方案,测试可用,如下:
models.py
在开发的过程中,在admin管理站点遇到一个全部由外键组成的表,这个表关联的多个表的数据量都比较庞大,在点击添加的时候,django会默认把这些表的数据全部给加载出来后才会响应,导致响应时间过长。
在尝试了多种方法后,终于发现了一个方法可以很有效的解决这个问题。
raw_id_fields = ['tablename']
这个可以让关联的表的数据 暂时不加载 等你需要的时候才加载...
首先,我这个想增加这个模型数据时有一个下拉选项是Customer表中的字段,然后想通过选择该选项保存后,把这个选项的值添加到本表中的customer_name字段。
第一个红框处是外键关联表名,第二个红框处是关联字段名,第三个是级联删除动作,必须要有,不然报错。
2.因为要做外键关联,所以models中,Customer这张表就必须要加unique=True唯一参数,不然一样会报错。还有就是因为要返回是个字段的值,而不是一个数据集,所以在python3中我们要添加一个
这样才能使下拉选项是字段的值,
在Django中,当你在一个模型中添加一个外键(ForeignKey)字段时,Django会自动创建一个关联的模型对象,并保存到数据库中。如果这个外键字段是指向Django的User模型(即用户模型),那么Django会自动为你创建一个用户对象,并将其与外键字段关联起来。
举个例子,假设你有一个博客应用,其中有一个Post模型和一个User模型,你想让每篇博客都有一个作者,可以在Post模型中添加一个外键字段,指向Django的User模型:
```python
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
在这个模型中,我们定义了一个ForeignKey字段,指向Django的User模型,并设置了on_delete为CASCADE,表示当User对象被删除时,所有与之相关的Post对象也会被删除。
当你在视图中创建一个新的Post对象时,只需要将author字段设置为当前登录用户即可:
```python
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .models import Post
@login_required
def create_post(request):
if request.method == 'POST':
title = request.POST.get('title')
content = request.POST.get('content')
post = Post(title=title, content=content, author=request.user)
post.save()
return redirect('post_detail', pk=post.pk)
else:
return render(request, 'create_post.html')
在这个视图中,我们从POST请求中获取title和content字段,然后创建一个新的Post对象,并将author字段设置为当前登录用户,最后保存到数据库中。
这样,当你创建一个新的Post对象时,Django会自动创建一个与之关联的User对象,并将其保存到数据库中。