簡體   English   中英

Django,在模型中使用當前用戶ID

[英]Django, using current user id in model

我對Python或Django並不是很熟悉,但是我開始使用Django作為后端來構建Web應用程序。

我有一些帶filler型號。 該字段由用戶填充,其值是userid

現在,我想自動將其值設置為當前登錄的用戶。

根據我的閱讀,可以使用save_model方法完成此操作,但是我無法使其正常工作。 編輯:我不是試圖通過管理界面來設置值,所以這可能不是我想要的)

這是我得到的:

在models.py中:

class Project(models.Model):
    CRITICITIES = (
        ('MAND', 'Mandatory to do the task'),
        ('HCHR', 'Not Mandatory but High Impact / High Risk Impact'),
        ('HCLR', 'Not Mandatory but High Impact / Low Risk Impact'),
        ('LCHR', 'Not Mandatory but Low Impact / High Risk Impact'),
        ('LCLR', 'Not Mandatory but Low Impact / Low Risk Impact'),
    )

    DOWNTIME = (
        ('3+', '> 3 Days'),
        ('1-3', '1 to 3 Days'),
        ('0.5-1', '1/2 to 1 Day'),
        ('0.5-', '<1/2 Day')
    )

    filler = models.ForeignKey(User, related_name='+')
    title = models.CharField(max_length=100, unique=True)
    description = models.TextField()
    user_departments = models.ManyToManyField('Department', related_name='+')
    products = models.ManyToManyField('Product', blank=False)
    processes = models.ManyToManyField('Process')
    functions = models.ManyToManyField('Function')
    frameworks = models.ManyToManyField('Framework')
    valuechains = models.ManyToManyField('ValueChain')
    regions = models.ManyToManyField('Region')
    project_path = models.CharField(max_length=255, blank=False)
    password = models.CharField(max_length=50, blank=True)
    downtime_acceptance = models.CharField(max_length=5, choices=DOWNTIME, blank=True)
    categories = models.ManyToManyField('Category', blank=False)
    criticity_detail = models.CharField(max_length=4, choices=CRITICITIES, blank=True)
    comment = models.TextField(blank=True)  #TODO: remove
    inputs = models.ManyToManyField('InputOutput', related_name='+', blank=True)
    outputs = models.ManyToManyField('InputOutput', related_name='+', blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        permissions = (
            ('can_view_logs', 'Can view project logs'),
        )

    def __unicode__(self):
        return self.title

在serializers.py中

class ProjectSerializer(serializers.ModelSerializer):
    requests = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Project
        fields = ('id', 'filler', 'title', 'description', 'requests', 'products', 'processes', 'functions', 'frameworks',
                  'categories', 'password', 'project_path', 'regions', 'criticity_detail', 'comment', 'inputs',
                  'outputs', 'valuechains', 'user_departments')

在urls.py中:

router = DefaultRouter(trailing_slash=False)
router.register(r'users', UserViewSet)
# Other irrelevant routes
# ...
router.register(r'projects', ProjectViewSet)
projects_router = NestedSimpleRouter(router, r'projects', lookup='project', trailing_slash=False)
projects_router.register(r'requests', ProjectRequestViewSet, base_name='project-requests')
router.register(r'requestcomments', RequestCommentViewSet)
router.register(r'requests', RequestViewSet)
requests_router = NestedSimpleRouter(router, r'requests', lookup='request', trailing_slash=False)
requests_router.register(r'statuses', RequestStatusViewSet, base_name='request-statuses')
requests_router.register(r'comments', RequestCommentViewSet, base_name='request-comments')
requests_router.register(r'estimatedcosts', RequestEstimatedCostViewSet, base_name='request-estimatedcosts')


urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^', include(projects_router.urls)),
    url(r'^', include(requests_router.urls)),
    url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^token-auth', views.obtain_auth_token),
]

在views.py中:

class ProjectViewSet(ModelViewSet):
    """
    API endpoint that allows projects to be viewed or edited.
    """
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer

例如,這里有字段created_atupdated_at ,它們在每次發布項目時都會自動以正確的值(當前日期)發布。 我試圖實現的目標是使用當前用戶ID對字段filler執行相同的操作。

根據文檔,您正在管理員中執行正確的操作。 看到這里 ,正是您的用例。 但是,如果要從其他地方保存模型,則可能要覆蓋模型中的save方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM