Reputation: 2495
I have a model like this:
class Grn(models.Model):
owner = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='grn_owner')
warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE, related_name="grn_warehouse")
vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE, related_name="grn_vendor")
product1 = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='grn_product1')
product1_quantity = models.IntegerField(default=0)
product2 = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='grn_product2', blank=True, null=True)
product2_quantity = models.IntegerField(default=0, blank=True, null=True)
product3 = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='grn_product3', blank=True, null=True)
product3_quantity = models.IntegerField(default=0, blank=True, null=True)
product4 = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='grn_product4', blank=True, null=True)
product4_quantity = models.IntegerField(default=0, blank=True, null=True)
How can I loop over an object of this model? I tried something like this:
class GRNFormView(CreateView):
model = Grn
template_name = 'GrnForm.html'
form_class = Grnform
def form_valid (self, form):
data = form.save(commit=False)
print("form.cleaned_data is ", form.cleaned_data)
data.owner = Employee.objects.filter(user = self.request.user.id)[0]
data.save()
print("data is", data)
for i in range(1,5):
if data.product(i):
print("product ", data.product(i))
else:
pass
How can I check if a product exists in an object and get its value ?
Upvotes: 0
Views: 23
Reputation: 34704
You can use getattr()
to dynamically access the products.
for i in range(1,5):
if getattr(data, f"product{i}"):
print("product ", getattr(data, f"product{i}"))
else:
pass
You can also just use many-to-many relationship with:
products = models.ManyToManyField(Product)
And then access with:
data.products.all()
Upvotes: 2