我试图弄清楚如何允许一个模型只取某些值。但是我不能使用IntegerField和选择选项,因为它是有几千个产品的产品数据库。更准确地说,我正在尝试创建管理产品订单的应用程序。现在我的模特是:
class Order(models.Model):
timestamp = models.DateField(auto_now_add=True)
komentarz = models.CharField(max_length=150, unique=False)
class Product(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
r = models.CharField(max_length=50, unique=False)
s = models.CharField(max_length=50, unique=False)
p = models.CharField(max_length=50, unique=False)
我用产品数据库创建了另一个应用程序,它包含了大约3000条记录。
class ProductBase(models.Model):
r = models.CharField(max_length=50, unique=False)
s = models.CharField(max_length=50, unique=False)
p = models.CharField(max_length=50, unique=False)
基本上,我希望允许ProductBase在数据库中接受值,这要归功于ProductBase模型。知道我该用什么吗?
编辑:让它更清楚:
R S P
Name 1 Parameter S Parameter P
Name 2 Parameter S Parameter P
Name 3 Parameter S Parameter P
这是ProductBase数据库。我希望允许Product只接受这三个值中的一个。(实际上是3000)
发布于 2020-05-30 07:36:37
为了在Product中只允许一组特定的值,基于某种“条件”,在将一个新的Product保存到数据库之前,我只需要在视图函数中检查这个条件。因此,如果您让r, s, p
创建新产品,比如说从表单中创建,然后检查条件是否满足,那么您可以将新的Product保存到db中。
假设r,s,p的集合在积和ProductBase中必须完全相同。例子可以是这样的:
# receive data from the form
r_value = form.clean_data.get("r")
s_value = form.clean_data.get("s")
p_value = form.clean_data.get("p")
# Your condition
check_db = ProductBase.object.filter(
s=s_value).filter(r=r_value).filter(p=p_value).exists()
if check_db:
# create new product
new_product = Product.object.create( #here goes values r, s, p )
new_product.save()
else:
# soma kind of feedback to user
条件可以是你想要的,只要改变逻辑。
https://stackoverflow.com/questions/62103862
复制