Я действительно застрял в сценарии, когда я хочу передать некоторые данные через сеанс в django из одного представления в другое. Я хочу передать данные из набора форм Dynami c (т. Е. Он может иметь одну форму, две формы или более - никакого способа узнать). В этом единственном поле - ProductCode
- является внешний ключ, поэтому json не может быть сериализован. Я отправлю свой код ниже:
models.py
class QuoteManifest(models.Model):
quote = models.ForeignKey(Quote, null=True, on_delete=models.CASCADE)
ProductCode = models.ForeignKey(Product, null=True)
DescriptionOfGoods = models.CharField(max_length=500, blank=True)
UnitQty = models.CharField(max_length=10, blank=True)
Type = models.CharField(max_length=50, blank=True)
Amount = models.CharField(max_length=100, blank=True)
Price = models.CharField(max_length=100, blank=True)
class Product(models.Model):
ProductCode = models.CharField(max_length=100)
HSCode = models.CharField(max_length=50, null=True)
DescriptionOfGoods = models.CharField(max_length=100)
Price = models.CharField(max_length=100)
UnitType = models.CharField(max_length=100)
def __str__(self):
return str(self.ProductCode)
views.py
def QuoteView(request):
QuoteManifestForm= modelformset_factory(QuoteManifest, QManifestForm, can_delete = True)
if request.method == "POST":
form2 = QuoteManifestForm(request.POST)
if form.is_valid():
manifestData = form2.cleaned_data
product = manifestData.pop('ProductCode') #this is where I get error
request.session['manifestData'] = manifestData
return redirect('QuotePreview')
class QuotePreview(View):
def get(self, request, *args, **kwargs):
manifestData = request.session.pop('manifestData', {})
context = {
'manifestData': manifestData,
}
pdf = render_to_pdf('quote_preview.html', context)
return HttpResponse(pdf, content_type='application/pdf')
forms.py
class QManifestForm(forms.ModelForm):
class Meta:
model = QuoteManifest
fields =('ProductCode', 'DescriptionOfGoods', 'UnitQty', 'Type','Amount', 'Price')
Когда Пробую это - появляется сообщение об ошибке ProductCode is not JSON serializable
. Итак, во-первых, как я могу сделать это таким. Во-вторых, как я могу это сделать, предполагая, что в manifestData
будет больше 1 ProductCode
?