【问题标题】:Django permission row table to a determinate user确定用户的 Django 权限行表
【发布时间】:2019-06-02 21:38:33
【问题描述】:

我正在询问有关权限的问题,我有 2 个表,AnagraficaCliente 和 Tracking,关系为 1 到许多,用户的 autentichate 默认内置于 django.contrib.auth.urls。 我搜索了许多论坛和站点,但我不明白如何为确定的用户设置行权限。例如: 我的网站是一个显示已发货项目的网络跟踪,如果我搜索跟踪它的用户,但所有跟踪都是可见的(对所有用户),我希望只有属于用户的跟踪显示给他。 我认为我使用来自

的模型用户

django.contrib.auth.models 导入用户

我不知道如何使用我的代码。

非常感谢。

models.py

from django.db import models
from django.urls import reverse

# Create your models here.

class AnagraficaCliente(models.Model):
    codice_cliente = models.CharField(max_length=20, primary_key=True, null=False, unique=True)
    ragione_sociale = models.CharField(max_length=80)
    #ragione_sociale_dest = models.CharField(max_length=40)
    nome = models.CharField(max_length=40, blank=True)
    cognome = models.CharField(max_length=20, blank=True)
    #ragione_sociale = models.CharField(max_length=20)
    indirizzo = models.TextField(blank=True)
    cap = models.CharField(max_length=5, blank=True)
    piva = models.CharField(max_length=20, blank=True)
    vatnumber = models.CharField(max_length=20, blank=True)
    #ragione_sociale_dest = models.CharField(max_length=40)
    #indirizzo_dest = models.TextField(null=True)

    def __str__(self):
        #return self.ragione_sociale + " " + self.codice_cliente
        #return self.ragione_sociale_dest + " - " + self.indirizzo_dest + " - " + self.codice_cliente 
        return self.codice_cliente + " - " + self.ragione_sociale

    class Meta:
        verbose_name = "AnagraficaCliente"
        verbose_name_plural = "AnagraficaClienti"




class Tracking(models.Model):
        track = models.CharField(max_length=11, null=False, unique=True, primary_key=True)
        indirizzo_dest = models.TextField(null=False)
        passaggio1 = models.CharField(max_length=50, blank=True)
        data1 = models.DateField(blank=True, null=True) 
        passaggio2 = models.CharField(max_length=50, blank=True)
        data2 = models.DateField(blank=True, null=True)
        passaggio3 = models.CharField(max_length=50, blank=True)
        data3 = models.DateField(blank=True, null=True)
        passaggio4 = models.CharField(max_length=50, blank=True)
        data4 = models.DateField(blank=True, null=True)
        passaggio5 = models.CharField(max_length=50, blank=True)
        data5 = models.DateField(blank=True, null=True)
        consegna = (
        ('C', 'Consegnato'),
        ('N', 'Non consegnato'),
        )
        consegnato = models.CharField(
            max_length=1, choices=consegna, blank=True, null=True)

        #consegnato = models.BooleanField(blank=True)
        #esito = models.CharField(max_length=10, blank=True)
        flag = models.CharField(max_length=2, blank=True)
        AnagraficaCliente = models.ForeignKey(AnagraficaCliente, on_delete=models.CASCADE, related_name='trackings')

        def __str__(self):
            return self.track

        class Meta:
            verbose_name = "Tracking"
            verbose_name_plural = "Trackings"

admin.py

from django.contrib import admin
from .models import AnagraficaCliente, Tracking
from import_export.admin import ImportExportModelAdmin
#from import_export.admin import ImportExportActionModelAdmin
from import_export import resources

# Register your models here.


class ClientResource(resources.ModelResource):
    class Meta:
        model = AnagraficaCliente
        skip_unchanged = True
        report_skipped = True
        #fields = ('id','codice_cliente','ragione_sociale','nome','cognome','ragione_sociale','indirizzo','cap','piva','vatnumber')
        import_id_fields = ['codice_cliente']


@admin.register(AnagraficaCliente)#Decoratore per mostrare in admin anagraficacliente
class SearchCodice(admin.ModelAdmin):
    search_fields = ('codice_cliente', 'ragione_sociale')#Ricerca in admin
    list_display = ('codice_cliente','ragione_sociale','indirizzo')#Elenco nomi campo nelle tabelle

class ClientAdmin(ImportExportModelAdmin):
    resource_class = ClientResource #Classe per import export csv punta alla classe ClientResource



class ClientResource(resources.ModelResource):
    class Meta:
        model = Tracking
        skip_unchanged = True
        report_skipped = True
        #fields = ('id','codice_cliente','ragione_sociale','nome','cognome','ragione_sociale','indirizzo','cap','piva','vatnumber')
        import_id_fields = ['track']


@admin.register(Tracking)
class SearchTrack(admin.ModelAdmin):
    search_fields = ('track', 'consegnato')
    list_display = ('track','indirizzo_dest','consegnato')

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    好的,我是这样解决的:

    在模型中,我添加了一个包含用户确切名称的新字段(见评论):

    user = models.CharField(max_length=20, blank=True)
    

    在查询对象的视图中,我更改了这一行:

    def tracking_views(request):
    query = request.GET.get('q', None)
    context = {}
    #query_anag = AnagraficaCliente.objects.all()
    
    if query and request.method == 'GET':
        #results = Tracking.objects.filter(track=query)#Old line, see next line
        results = Tracking.objects.filter(track=query, user=request.user) #Line that 
        changed
        print (type(results))
        if results.exists():
            context.update({'results': results})
            print(context)
        else:
            return render(request,'tracking_not_found.html',context)
            # return HttpResponse("<h1>post creato con successo!</h1>")
    return render(request,'tracking.html',context)
    

    因此,当用户通过身份验证时,只会显示属于该用户的具有跟踪数量的查询,(当然在每条记录中都需要将跟踪行映射到新字段“用户”)

    【讨论】:

    猜你喜欢
    • 2022-11-30
    • 2021-05-25
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2020-04-16
    • 2020-11-04
    相关资源
    最近更新 更多