0

In models.py:

class Client(AbstractBaseUser):

    username = models.CharField(max_length=32, unique=True)
    email = models.EmailField('email address', unique=True, db_index=True)
    avatar = models.ImageField('avatar', upload_to='avatars')
    id = id(object)

class Order(models.Model):
    class Meta():
        db_table = 'order'

    short_desc = models.CharField(max_length=30)
    subject = models.ForeignKey(Subject, blank=True)
    user_id = models.ForeignKey('Client', to_field='id', related_name='client_id', default='0', blank=True)
    performer_id = models.ForeignKey('Client', to_field='id', related_name='performer_id', default='0', blank=True)
    worktype = models.ForeignKey(Type, blank=True)
    level = models.IntegerField(default=0, blank=True)
    readiness = models.BooleanField(default=False, blank=True)
    description = models.TextField(max_length=2000, blank=True)
    file = models.FileField(upload_to='orderfiles', blank=True)
    #maxdate = models.DateField(blank=True)
    addate = models.DateField(auto_now=True, blank=True)
    price = models.IntegerField(max_length=10, blank=True)
    responses = models.IntegerField(blank=True)

In forms.py:

class AddOrderForm(forms.ModelForm):

    short_desc       = forms.CharField(widget=forms.TextInput,label="Краткое описание(послужит именем)")
    subject          = forms.ModelChoiceField(queryset=Subject.objects.all(), label="Предмет")
    worktype         = forms.ModelChoiceField(queryset=Type.objects.all(), label="Тип")
    level            = forms.IntegerField(widget=forms.TextInput,label="Уровень сложности (от 1 до 5)")
    description      = forms.CharField(widget=forms.TextInput,label="Полное описание")
    #maxdate          = forms.DateField(widget=forms.TextInput,label="maxdate")
    price            = forms.IntegerField(widget=forms.TextInput,label="Ваша цена")
    responses        = forms.IntegerField(widget=forms.TextInput,label="Кол-во ответов на заказ")

    class Meta:
        model = Order
        fields = ['short_desc',  'level', 'description', 'price', 'responses', 'subject', 'worktype']

In views.py:

def addorder(request, user_id):
    """
    Adding Order view
    """
    if request.POST:
        form = AddOrderForm(request.POST)

        if form.is_valid():

            form.save()

            return redirect('/')


    else:
        return redirect('/')
    auth1 = auth.get_user(request).username
    return render_to_response('customer.html', { 'form': form,'username' : auth1}, context_instance=RequestContext(request))

I need the field user_id in class Order to be initialized immediately after adding order(). Where should I do it and in which way? I need something like this logic: Client adds an Order through AddOrderForm and then user_id field of just added object of class Order has to be initialized with an object of class Client, whose id equals user_id in parameters of addorder() function.

1
  • Are there any decent reason you're using textInput widget for integerField? You could use verbose name and not redefine all the fields in the form. Commented Apr 16, 2015 at 8:50

1 Answer 1

2

You can do that using commit=False while saving the form. This is typical way of saving the object using model form which has fewer fields.

def addorder(request, user_id):
    """
    Adding Order view
    """
    if request.POST:
        form = AddOrderForm(request.POST)

        if form.is_valid():

            order = form.save(commit=false)
            order.client_id = Client.objects.get(id=user_id)
            order.save()

            return redirect('/')


    else:
        return redirect('/')
    auth1 = auth.get_user(request).username
    return render_to_response('customer.html', 
             { 'form': form,'username' : auth1}, 
             context_instance=RequestContext(request))

Disclaimer: Handle errors e.g. Client.objects.get() may fail. Use appropriate fields to search.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.