Ich habe jeden "InterityError" + "kann nicht NULL" Beitrag gelesen und kann immer noch nicht aufspüren, was diesen Fehler verursacht.Django IntegrityError signup_simplesubscriber.date_created ist möglicherweise nicht NULL
Ich habe ein zweiteiliges Anmeldeformular. Der erste Teil ist nur ein Produkt auszuwählen. Das übergibt eine Produkt-ID als Teil der URL an die nächste Seite, wo sie persönliche Informationen eingeben. Ich kann das Formular in Ordnung bringen, bis ich anfange, Felder zu entfernen - ich benutze Modellformulare -, weil einige Felder nicht angezeigt werden müssen.
Hier ist mein Modell, und die Modelform:
class SimpleSubscriber(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=200)
city = models.CharField(max_length=100)
state = models.CharField(max_length=2)
zipcode = models.CharField(max_length=9)
phone = models.CharField(max_length=10)
email = models.EmailField()
date_created = models.DateTimeField(null=True)
sub_type = models.ForeignKey(Product)
def __unicode__(self):
return self.name
class SubscriberForm(ModelForm):
class Meta:
model = SimpleSubscriber
fields = ('name', 'address', 'city', 'state', 'zipcode', 'phone', 'email', 'sub_type',)#'date_created',
Und hier ist meine Ansichten:
def select_product(request):
title = "get yourself an e-edition. wurd."
pform = Product.objects.order_by('product_active')
if request.method == 'POST': # If the form has been submitted...
pform = ProductForm(request.POST) # A form bound to the POST data
if pform.is_valid(): # All validation rules pass
# ...
return HttpResponseRedirect('signup/%i' % pform.id) # Redirect after POST
else:
form = ProductForm() # An unbound form
return render_to_response('signup/index.html', {'title': title, 'pform': pform}, context_instance=RequestContext(request))
def subscriber_signup(request, product_id):
productchoice = Product.objects.get(id=product_id)
now = datetime.datetime.now()
title = "We need some information."
if request.method == 'POST': # If the form has been submitted...
sform = SubscriberForm(request.POST) # A form bound to the POST data
if sform.is_valid(): # All validation rules pass
sform.date_created = now
sform.sub_type = productchoice
sform.save()
return HttpResponseRedirect('thankyou/') # Redirect after POST
else:
sform = SubscriberForm() # An unbound form
return render_to_response('signup/detail.html', {'title': title, 'sform': sform, 'productchoice': productchoice, 'now': now.date(),}, context_instance=RequestContext(request))
Ich denke, es ist etwas mit dem Modelform zu tun hat, aber ich bin ziemlich neu, so Ich habe wirklich keine Ahnung. Wenn ich alle Felder SubscriberForm hinzufüge, werden sie ausgefüllt und alles funktioniert gut. Aber ich möchte nicht, dass Benutzer sagen müssen, wann sie das Formular ausgefüllt haben, also setze ich sform.date_created = jetzt und ich möchte, dass die product_id automatisch von der Auswahl ausgefüllt wird, die sie auf der vorherigen Seite ausgewählt haben. Aber wenn ich diese Felder aus dem Formular ausschließe, wird der IntegrityError ausgelöst, was nicht sehr hilfreich ist, um zu erklären, was geändert werden soll.
Irgendwelche Hinweise auf wo ich vermasseln?
Danke,
Das ist genial. Definitiv den Fehler behoben. Warum commit = False? Was macht das und ist die Reihenfolge dieser Befehle wichtig? Ich nehme an, die sform.save (commit = False) muss zuerst gehen und subscriber.save() zuletzt? –
Der Job der Speichermethode des Formulars besteht darin, die Daten zu verarbeiten und ein Objekt zurückzugeben. Wenn Sie sagen, dass es nicht festgeschrieben werden soll, bedeutet dies, dass es das tut, aber ohne den Datenbank-Synchronisierungsteil. – fceruti