我正在尝试创建一个简单的应用程序。它有以下型号:
型号:产品
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框架提供的内置管理应用程序。通过在Admin类中添加以下内容,我能够仅为相应用户提供产品数据。
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。 对于User1,我添加了10个产品。然后我登录为User2,User2无法看到User1添加的产品。
现在,当我想为User2添加产品时,如果product_sku字段中存在冲突,这是一个独特的字段,我根本无法添加产品。
如何解决这个问题。我需要每个用户添加他自己的产品,但product_sku对他的产品数据集是唯一的,而不是整个数据库。
答案 0 :(得分:1)
您应该为sku和用户定义unique_together
,而不是在unique=True
字段中定义product_sku
。
class Product(models.Model):
...
class Meta:
unique_together = (('product_sku', 'product_owner'),)
这将确保每个用户只能拥有一个具有特定sku的产品,但多个用户可以拥有相同的sku。