2017-04-09 1 views
0

Ich habe ein Feedback-Formular in meiner App. Ein Benutzer muss angemeldet sein, um eine Rückmeldung zu senden. Ein Benutzer wird gebeten, eine Rückmeldung in den Textbereich einzugeben. Bei der Übermittlung möchte ich die Benutzerdetails im Feld submitted_by und dem Zeitpunkt der Erstellung des Formulars als submitted_date (das auch Zeit enthält) speichern.Wie können Sie submitted_date und submitted_by in einem Feedback-Formular in Django einbeziehen?

Ich habe viele Diskussionen über die Verwendung von auto-now_add=True und auto_now gelesen, aber es gibt viele Meinungen zu diesem Thema und ein wenig verwirrend.

Ich benutze Model-Form, um Daten vom Benutzer einzugeben. Dies ist, wie meine andere Datei wie folgt aussieht:

# myapp/models.py 

class Feedback(models.Model): 
    content = models.TextField(max_length=100) 
    submitted_by = models.ForeignKey(User) 
    submitted_date = models.DateTimeField() # what do add here in arguments ? 

    def __str__(self): 
     return self.content + " @ " + self.submitted_date 

# myapp/forms.py 

class FeedbackForm(ModelForm): 
    class Meta: 
     model = Feedback 
     fields = [ 'content' ] 

# myapp/views.py 
def addfeeback(request): 
    if request.method == "POST": 
     form = FeedbackForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      # Do I need to do something here ? 
      return redirect('home') 
    else: 
     form = FeedbackForm() 
    return render(request, 'myapp/addFeedback.html', { 'form': form}) 

# myapp/urls.py 

url(r'^feedback/$', core_views.addfeeback , name='add-feedback'), 

# myapp/templates/addFeedback.html 

{% extends 'registration/base.html' %} 

{% block title %} Feedback {% endblock %} 

{% block content %} 
    <form method="post" > 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit"> 
    </form> 
{% endblock %}  

Es wird sehr geschätzt, wenn Sie relevante Änderungen in meinen Code vorschlagen können, wie beabsichtigt zu tun. Vielen Dank.

Antwort

1

Bei den Modellen

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.submitted_by = request.user 
    obj.save() 

tun Es gibt nichts falsch auto_now_add mit verwenden. Aber da Sie sowohl den Übermittler als auch das Datum einstellen müssen, würden Sie nicht viel gewinnen.

Das Muster ist jedoch zu verwenden commit=False beim Speichern des Formulars, dann das Objekt, das zurückgegeben wird, bevor Sie es manuell speichern geändert.

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.submitted_by = request.user 
    obj.submitted_date = datetime.datetime.now() 
    obj.save() 
    return redirect('home') 
+0

Oder 'django.utils.timezone.now()', idealerweise ;-) –

0

Sie können

submitted_date = models.DateTimeField(auto_now_add=True) 
Verwandte Themen