簡體   English   中英

如何將數據庫模型字段設置為只讀,即使超級用戶也應該能夠編輯它

[英]How to set db model fields to just read-only even a superuser should be able to edit it

我嘗試過這種方式,就像我們使用primary keys但它並沒有像我想要的那樣工作。 我希望某些字段不能從Django Admin編輯我們可以使用權限管理它,但我希望它適用於所有人,即使是超級用戶也不應該能夠更改值

我試過這種方式

#models.py

class Payments(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name="Payment Made By",)
    paymentForOrderID = models.CharField(max_length=200, null=True, blank=True,editable=False, verbose_name="Payment For Order ID")
    paymentMethodUsed = models.CharField(max_length=200, null=True, blank=True, verbose_name="Method Used")
    aproxTimeAndDateOfPayment = models.CharField(max_length=200, null=True, blank=True,editable=False, verbose_name="Approx Date/Time Of Payment")
    totalAmountPaid = models.CharField(max_length=200, null=True, blank=True,editable=False, verbose_name="Amount Paid")
    paymentDetails = models.TextField(null=True, blank=True,editable=False,verbose_name="Details")
    createdAt = models.DateTimeField(auto_now_add=True)
    _id = models.AutoField(primary_key=True,editable=False, verbose_name="Entry ID")

    def __str__(self):
        return str(self.createdAt)
    

當我打開它時這樣做,它只顯示可編輯的字段,而不顯示其他字段。

可能有一些更好的方法來做到這一點,但據我所知。 .... 如果你想閱讀不可編輯的字段,你可以從admin.py添加list_display來管理它在你的情況下保持模型不變......

#models.py
class Payments(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name="Payment Made By",)
    paymentForOrderID = models.CharField(max_length=200, null=True, blank=True,editable=False, verbose_name="Payment For Order ID")
    paymentMethodUsed = models.CharField(max_length=200, null=True, blank=True, verbose_name="Method Used")
    aproxTimeAndDateOfPayment = models.CharField(max_length=200, null=True, blank=True,editable=False, verbose_name="Approx Date/Time Of Payment")
    totalAmountPaid = models.CharField(max_length=200, null=True, blank=True,editable=False, verbose_name="Amount Paid")
    paymentDetails = models.TextField(null=True, blank=True,editable=False,verbose_name="Details")
    createdAt = models.DateTimeField(auto_now_add=True)
    _id = models.AutoField(primary_key=True,editable=False, verbose_name="Entry ID")

    def __str__(self):
        return str(self.createdAt)

但添加PaymentManageradmin.py

你的admin.py應該像

from django.contrib import admin
from .models import Payments


class PaymentsAdmin(admin.ModelAdmin):
    list_display = ['_id','user', 'paymentForOrderID', 'paymentMethodUsed','aproxTimeAndDateOfPayment','totalAmountPaid','createdAt','paymentDetails']
    ordering = ['createdAt']

admin.site.register(Payments, PaymentsAdmin)

這樣您就可以從列表視圖中讀取值,但是當您打開它時,不可編輯的字段將不會顯示。

暫無
暫無

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

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