2017-09-13 15 views
0

我正在嘗試創建一個簡單的應用程序。它具有以下型號:Django:用戶的數據無權

型號:產品

class Product(models.Model): 
    product_owner = models.ForeignKey(User, verbose_name='User') 
    product_title = models.CharField(max_length=100, null=False, 
verbose_name='Product title') 
    product_description = models.TextField(max_length=250, verbose_name='Product description') 
    product_qty = models.IntegerField(verbose_name='Quantity') 
    product_mrp = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='Maximum retail price') 

    product_sku = models.CharField(max_length=100, null=False, unique=True, verbose_name='SKU',help_text='Enter Product Stock Keeping Unit') 
    product_barcode = models.CharField(max_length=100, null=False, verbose_name='Barcode') 

我只使用內置的管理員應用的Django框架提供。通過在管理員類中添加以下內容,我可以僅爲相應用戶提供產品數據。

class ProductAdmin(ImportExportModelAdmin): 
    exclude = ('product_owner',) 
    list_display = ['product_title','product_description', 'product_qty', 
        'product_mrp','product_sku','product_barcode'] 
    search_fields = ['product_title', 'product_description', 'product_sku', 
        'product_barcode'] 
    ordering = ['id'] 
    list_display_links = ['product_title'] 

    def get_queryset(self, request): 
     if request.user.is_superuser: 
      return Product.objects.all() 
     return Product.objects.filter(product_owner=request.user) 

    def save_model(self, request, obj, form, change): 
     if not change: 
      obj.product_owner = request.user 
     obj.save() 

當我剛開始試驗時,我添加了2個用戶User1和User2。 對於用戶1我添加了10個產品。然後我登錄進來,User2和User2看不到User1添加的產品。

現在,當我爲用戶2添加產品時,如果在唯一字段的product_sku字段中存在衝突,我根本無法添加產品。

如何解決這個問題。我需要每個用戶添加他自己的產品,但product_sku對他的產品數據集是唯一的,而不是整個數據庫。

回答

1

而不是在product_sku字段上定義unique=True,您應該爲sku和用戶定義unique_together

class Product(models.Model): 
    ... 
    class Meta: 
     unique_together = (('product_sku', 'product_owner'),) 

這將確保每個用戶只能擁有一個具有特定sku的產品,但多個用戶可以擁有相同的sku。