Je vais essayer de donner autant d'informations que je peux sans donner plus que ce dont j'ai besoin.Django: Lier une classe à une autre classe avec une clé étrangère lorsqu'elle est créée par le formulaire
J'ai une classe « Livre » qui, entre autres domaines, est liée à une autre classe « Utilisateur », comme ceci:
from users.models import User
class Book(models.Model):
title = models.CharField(max_length=150)
owner = models.ForeignKey('users.User')
Ce « livre » est créé par une forme, qui est codé comme si:
from django import forms
from books.models import Book
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ["title"]
ce formulaire est affiché avec un modèle qui ressemble à:
<form method="post" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" />
</form>
qui est appelé par le followin g Vue:
def create_book(request):
if request.user is None:
return redirect("https://stackoverflow.com/users/login/")
if request.method == "POST":
form = BookForm(request.POST)
if form.is_valid():
form.owner = request.user # FFFFFUUUUUUU
form.save()
return redirect("/books/")
else:
form = BookForm()
return render_to_response("books/create.html", {
"form": form,
}, context_instance=RequestContext(request))
Lorsque ce formulaire est soumis, il devrait mettre le livre dans la base de données, mais je reçois une erreur: IntegrityError at /books/create/ null value in column "owner_id" violates not-null constraint
J'imagine que je ne suis pas le propriétaire correctement mise. En ce qui concerne ce qui précède, form.owner = request.user, le bit request.user est mis en place par le middleware: de users.models importer utilisateur
class UserMiddleware(object):
def process_request(self, request):
user_id = request.session.get("user_id")
if user_id is not None:
request.user = User.objects.get(pk=user_id)
else:
request.user = None
Il doit donc être un utilisateur valide (je peux vérifier Je suis connecté par d'autres fonctionnalités dans mon code). Je suis très nouveau sur Python/Django et je parie que ma façon de définir le propriétaire du nouveau livre n'est pas correcte, mais peut-être que quelque chose d'autre ne va pas. Si plus d'informations sont nécessaires, s'il vous plaît faites le moi savoir, et j'espère que ce n'est pas trop!
Merci pour l'aide.
Parfait, merci pour l'aide! – Joseph