Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django格式。如何从表单初始化模型字段?_Django_Forms_Views_Models - Fatal编程技术网

Django格式。如何从表单初始化模型字段?

Django格式。如何从表单初始化模型字段?,django,forms,views,models,Django,Forms,Views,Models,在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

在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)
在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']
在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))

我需要在
添加
ing
Order()
之后立即初始化
class Order
中的
user\u id
字段。我应该在哪里做,用哪种方式?我需要这样的逻辑:
Client
通过
AddOrderForm
添加一个
Order
,然后刚刚添加的
class Order
对象的
user\u id
字段必须用
class Client
对象初始化,该对象的id等于
addorder()参数中的
user\u id
函数。

您可以在保存表单时使用
commit=False
执行此操作。这是使用字段较少的模型表单保存对象的典型方式

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))

免责声明:处理错误,例如
Client.objects.get()
可能会失败。使用适当的字段进行搜索。

您使用integerField的textInput小部件有什么正当理由吗?您可以使用详细名称,而不是重新定义表单中的所有字段。