简体   繁体   English

如何设置 Django model 默认值等于查询结果

[英]How to set Django model default value equal to result of a query

I'm quite new at Django, and trying to create a model where det default value for Foreign Keys user and department are set to the correct values for the logged in user.我是 Django 的新手,并尝试创建一个 model,其中外键用户和部门的默认值设置为登录用户的正确值。 Normally I use the request object and queries the database, but in the model definition I don't know how to do this.通常我使用请求 object 并查询数据库,但在 model 定义中我不知道该怎么做。 I suppose a path forward is to make default value a function and make the query in the function, but I am stuck.我想前进的道路是将默认值设为 function 并在 function 中进行查询,但我被卡住了。 Any help are greatly appreciated.非常感谢任何帮助。 Here is an example of my code:这是我的代码示例:

from django.contrib.auth import get_user_model
from django.db import models
from another_app.models import Department, DepartmentPermissions

class Article(models.Model):
    header = models.CharField(max_length=200)
    text = models.CharField(max_length=800)
    owner = models(get_user_model(), related_name='owner_article', on_delete=models.PROTECT)
    department = models.ForeignKey(Department, on_delete=models.CASCADE) #here I want it defaulted to DepartmentPermissions.objets.get(user= <logged in user>)[0].department

Well it is possible but not from the model but from the admin.嗯,这是可能的,但不是来自 model,而是来自管理员。 So, you can do:所以,你可以这样做:

from django.contrib.auth import get_user_model
from django.db import models
from another_app.models import Department, DepartmentPermissions

# import admin
from django.contrib import admin

class Article(models.Model):
    header = models.CharField(max_length=200)
    text = models.CharField(max_length=800)
    owner = models(get_user_model(), related_name='owner_article', on_delete=models.PROTECT)
    department = models.ForeignKey(Department, on_delete=models.CASCADE) 

class ArticleAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.department = request.user
        obj.save()

Now, it will act like default because, when you save to model, the value will be saved from save_model现在,它将像默认值一样,因为当您保存到 model 时,该值将从save_model保存

It is not possible.这不可能。 That is your part of business logic.那是您的业务逻辑的一部分。 You should do it in your View , or Validator (if you use Django Rest Framework)您应该在ViewValidator中执行此操作(如果您使用 Django Rest 框架)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM