Read01
Read01

Reputation: 21

How to create model objects that belong to unique user

I am setting up a delivery app .I want to be able to create a Reciever that belongs to the user logged in when created.

class CustomUser(AbstractUser):
    first_name = models.CharField(max_length=30, blank=False)
    last_name = models.CharField(max_length=30, blank=False)
    email = models.EmailField(blank=False)

class Reciever (models.Model):
    name = models.CharField(max_length=256,blank=False)

I want to create a Reciever object that belongs to a particular user. When i create a Reciever now , it is available to all users.

Upvotes: 2

Views: 52

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476557

In that case you can use a OneToOneField [Django-doc], which is a ForeignKey [Django-doc], but with a uniqueness constraint attached to it, like:

class Reciever(models.Model):
    name = models.CharField(max_length=256,blank=False)
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)

In the view, you can thus attach the logged in user to the Receiver, like:

def some_view(request):
    Receiver.objects.create(name='foo', user=request.user)

given of course you already made CustomUser your customer model [Django-doc].

If you made a ModelForm, you can exclude the user field, and set it in the view, for example:

def some_view(request):
    form = ReceiverForm(request.POST)
    if form.is_valid():
        object = form.save(commit=False)
        object.user = request.user
        object.save()
        # ...
    # ...

Upvotes: 2

Related Questions