Wednesday, October 25, 2017

Re: Automatically assign model instance to the user who created it. And only that user can edit/delete the instance.

when you submited form, form_valid will called in CreateView and give you a instance of user form submited (form parameter in form_valid function) and you set user to logged user (self.request.user)

On Wed, Oct 25, 2017 at 7:25 PM, Jack <valachio123@gmail.com> wrote:
I tried using FormView but kept running into errors.  I used your second response and it worked!  I don't fully understand the code, but it seems to work flawlessly.

Thank you so much! I own you a big one.

On Wednesday, October 25, 2017 at 5:57:04 AM UTC-4, k2527806 wrote:
that your code : 
class CreatePost(CreateView):
    model = Post

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(CreatePost, self).form_valid(form)

On Wed, Oct 25, 2017 at 1:22 PM, mohammad k <k252...@gmail.com> wrote:

On Wed, Oct 25, 2017 at 1:21 PM, mohammad k <k252...@gmail.com> wrote:
class Upload(FormView):
    http_method_names = ['get', 'post']
    template_name = 'public/upload.html'
    success_url = reverse_lazy('upload')
    form_class = UploadForms

    def get(self, request, *args, **kwargs):
        form = self.form_class(user=request.user)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST, request.FILES, user=request.user)
        if form.is_valid():
            data = form.save(commit=False)
            data.user = request.user
            data.save()
            messages.add_message(request, messages.SUCCESS, self.success_message)
            return redirect(self.success_url)
        return render(request, self.template_name, {'form': form})

On Wed, Oct 25, 2017 at 3:22 AM, Jack Zhang <valac...@gmail.com> wrote:
Thanks for your response.  This is an off-topic question but I can't figure out how to get 'request' working.  I'm using the CreateView generic class, so there's no space to insert 'request'.  This is what my code looks like.  When I try to run it, it tells me that request is not found.  

class ListingCreateView(LoginRequiredMixin, CreateView):
    model = BuyerListing
    
    form_class = PostListing(self.request.POST)
    if form.is_valid():
        form_save = form.save(commit=False)
        form_save.user = request.user # user is logged in
        form.save()
        
    def get_queryset(self):  # the user want to edit this post must be owner this post
        post_qs = super(PostListing, self).get_queryset()
        return post_qs.filter(user=self.request.user)

On Tuesday, October 24, 2017 at 12:35:15 PM UTC-4, k2527806 wrote:
try that in your views
form = Dog_Form(request.POST)
if form.is_valid():
form_save = form.save(commit=False)
form_save.user = request.user # user is logged in
form.save()

On Tue, Oct 24, 2017 at 7:37 PM, Jack Zhang <valac...@gmail.com> wrote:
Let's say I have a model called 'Dogs'.  Users can create instances of Dogs.  Let's say we have a user called User1.  I have 2 questions:

1. When User1 creates an instance of Dogs, how do I automatically assign that instance to User1?  I tried using a model field like this but it doesn't pick the user automatically:

user = models.ForeignKey(User, unique=False)

2. After the instance has been created, how do I make the instance only editable and removable by the user who made it?  Basically, if User1 creates an instance of Dogs, only User1 can edit and delete that instance. 

Thanks.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/dedbfe8b-1013-4844-b142-1e8615a1ef9a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/950d853a-ade3-4d27-8e23-a47c6b70c80e%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3b9b7b1a-78dd-4123-aef5-82e0b7089cb1%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CACOk0TwXXhgfPgbt5w7SbdE9kPSOXMuTnXmdMwmEOiBCTvEiBg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment