Django ModelForm с доступом к более чем одной модели
Итак, я хочу знать, возможно ли, чтобы модельная форма django имела доступ к более чем одной модели django... в настоящее время у меня есть 2 модели, относящиеся к продукту, и они показаны ниже... причина, по которой я сделал 2 модели, заключается в том, чтобы позволить каждому продукту иметь несколько изображений
class Product(models.Model):
title = models.CharField(max_length=255)
added = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
thumbnail = models.ImageField(upload_to='uploaded_products/', blank=True, null=True)
description = models.TextField(max_length=255, null=True, blank=True)
categories = models.ManyToManyField(Category,related_name='products', blank=True, help_text="Select One or More Categories that the product falls into, hold down ctrl to select mutiple categories")
tags = models.ManyToManyField(Tag, blank=True)
stock = models.PositiveIntegerField(default=1, blank=True)
notes = models.TextField(null=True, blank=True)
ownership = models.FileField(blank=True, null=True, upload_to='product_files', help_text='Optional : provide valid document/picture to proof ownership (presence of this document increases the reputation of your product).Note: Provided Document if invalid or incorrect can be invalidated after upload')
verified = models.BooleanField(default=False, blank=True, null=True)
uploader = models.ForeignKey(Account, on_delete=models.CASCADE, blank=True)
serial_number = models.CharField(max_length=255, blank=True, null=True)
class Meta:
ordering = ['-updated']
def __str__(self):
return self.title
class Product_Image(models.Model):
name = models.CharField(max_length=255, blank=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image = models.ImageField(upload_to='uploaded_products/')
default = models.BooleanField(default=False, blank=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.name:
self.name = self.product.title
super().save(*args, **kwargs)
Теперь я хочу иметь возможность получить доступ к обеим моделям в модельной форме и редактировать их. В настоящее время я попытался добавить вторую модель в атрибут Meta class модели и он ясно показал, что это невозможно таким образом.... если доступ к 2 моделям невозможен, какое возможное решение я могу применить к моей текущей структуре модели, чтобы сохранить возможность позволить продукту иметь несколько изображений. Спасибо, поскольку я с нетерпением жду рабочего решения.
forms.py:
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = [add your field from this model here]
class ImagePostForm(ProductForm):
#define the field your want here from Product_Image(using forms)
image = forms.ImageField(label='Image',widget=forms.ClearableFileInput(attrs={'multiple': True}))
class Meta(ProductForm.Meta):
fields = ProductForm.Meta.fields + ['image',#add the field your want from Product_Image here]
Теперь внутри вашего views.py вы можете просто вызвать ImagePostForm. Вы можете сделать что-то вроде этого
.
views.py
from .forms import ImagePostForm
from .models import Product,Product_Image
def your_view(request):
if request.method=='POST':
form=ImagePostForm(request.POST or None,request.FILES or None)
files = request.FILES.getlist('image')
if form.is_valid():
post = form.save(commit=False)
#add the things your want to add here after that you can save it
post.save()
if files:
for f in files:
Product_Image.objects.create(product=post,image=f)
redirect('the view here')
else:
form = ImagePostForm()
return render(request,'your-template',{'form':form})