Заполнить форму django данными из базы данных в представлении

Я реализовал простой пользовательский QueryStringConverter так, чтобы можно было сделать qs1, строка [] затем имеет переменную строки запроса быть разграниченной запятой (например, http://server/service/SomeRequest?qs1=val1,val2,val3,val4 )

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml,
        UriTemplate = "SomeRequest?qs1={qs1}")]
XElement SomeRequest2(string[] qs1);

Первый, Вам нужен класс, который наследовался WebHttpBehavior так, чтобы мы могли ввести наш пользовательский QueryStringConverter:

public class CustomHttpBehavior : System.ServiceModel.Description.WebHttpBehavior
{
    protected override System.ServiceModel.Dispatcher.QueryStringConverter GetQueryStringConverter(System.ServiceModel.Description.OperationDescription operationDescription)
    {
        return new CustomQueryStringConverter();
    }
}

Затем наш CustomQueryStringConverter, который обрабатывает строку [] параметры:

public class CustomQueryStringConverter : System.ServiceModel.Dispatcher.QueryStringConverter
{
    public override bool CanConvert(Type type)
    {
        if (type == typeof(string[]))
        {
            return true;
        }

        return base.CanConvert(type);
    }

    public override object ConvertStringToValue(string parameter, Type parameterType)
    {
        if (parameterType == typeof(string[]))
        {
            string[] parms = parameter.Split(',');
            return parms;
        }

        return base.ConvertStringToValue(parameter, parameterType);
    }

    public override string ConvertValueToString(object parameter, Type parameterType)
    {
        if (parameterType == typeof(string[]))
        {
            string valstring = string.Join(",", parameter as string[]);
            return valstring;
        }

        return base.ConvertValueToString(parameter, parameterType);
    }
}

последняя вещь, которую необходимо сделать, создают расширение конфигурации поведения так, чтобы время выполнения могло получить экземпляр CustomWebHttpBehavior:

public class CustomHttpBehaviorExtensionElement : System.ServiceModel.Configuration.BehaviorExtensionElement
{
    protected override object CreateBehavior()
    {
        return new CustomHttpBehavior();
    }

    public override Type BehaviorType
    {
        get { return typeof(CustomHttpBehavior); }
    }
}

Теперь мы добавляем элемент к нашим расширениям конфигурации так, чтобы наш CustomWebHttpBehavior использовался, мы используем Название того расширения вместо в нашем поведении:

 
   
     
       
     
   
  
   
    
      
    
   
  
  
    
      
    
  
  
 

можно теперь также расширить CustomQueryStringConverter для обработки других типов, которые значение по умолчанию каждый не делает, такие как nullable типы значения.

ПРИМЕЧАНИЕ: существует ошибка, зарегистрированная в подключении Microsoft, которое непосредственно касается этого кода. Код на самом деле не работает при почти всех обстоятельствах, где Вы пытаетесь Запросить, Преобразовывают различные типы.

http://connect.microsoft.com/VisualStudio/feedback/details/616486/bug-with-getquerystringconverter-not-being-called-by-webservicehost#tabs

удостоверьтесь, что Вы читаете это тщательно перед тем, чтобы тратить впустую часы Вашего времени, создавая пользовательские преобразователи строки запроса REST, которые не могут возможно работать. (Относится к Платформе 4.0 и ниже).

19
задан avatar 25 January 2011 в 02:36
поделиться

1 ответ

То, что необходимо сделать, должно узнать, какой объект делают Вас, на самом деле хотят для, например, если Вы хотите узнать книгу, названную "Upvote-if-u-like!" затем Ваш urls.py хотел бы

urlpatterns = [
path('textshare/<str:slug>',views.extract,name="textshare"),]

теперь, когда кто-то будет искать mybook.com/textshare/upvote-if-u-like!/

, он возьмет его к views.py, который был бы похож

def extract(request,slug):
    context={}

    obj=bookForm.objects.get(title=slug)
    form=bookModelForm(instance=obj)

    context={'form':form}
    return render(request,'bookfound.html',context)

, где bookForm находится в Models.py, и bookModelForm находится в forms.py Счастливом Djangoing:)

0
ответ дан 30 November 2019 в 03:58
поделиться