Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 4

0
votes
answers
45 views
+10

Django的模板,如果同一個標籤內的邏輯breckets和優先順序

1

在我的Django模板我有Django的模板,如果同一個標籤內的邏輯breckets和優先順序

{% if object_not_readonly and user_is_worker or user_is_admin %} 

Django的doc告訴我

使用兩個AND和OR子句條件允許,並且具有更高的優先級或者是

我覺得這在IF語句中聲明邏輯優先級的方式並不明顯。

問題是

是它像在Django模板語言{% if object_not_readonly and (user_is_worker or user_is_admin) %}條件,與像if A and (C or B) and (not Z)明顯的條款?

沙发
0
0

爲了絕對安全,我會分裂它是這樣的:

{% if object_not_readonly %} 
    {% if user_is_worker or user_is_admin %} 

     ... 

    {% endif %} 
{% endif %} 
+0

是的,我做到這一點。但它太複雜,並不明顯,我認爲 –

+0

我認爲是更清晰但ymmv,也不會需要更多的處理時間。 –

+0

嵌套'如果'是偉大的。但是,如果django開發人員執行復雜的條件,那麼看到它做得很好就會很酷 –

0
votes
answers
55 views
+10

擴展Django 1.11用戶模型

2

我正在嘗試解決如何擴展Django用戶模型以向用戶添加信息。我似乎無法得到它的工作。我究竟做錯了什麼? 可以在我正在擴展到的同一模型中使用外鍵嗎?你如何創建一個超級用戶,還是你必須通過python manage.py shell手動完成?擴展Django 1.11用戶模型

這裏是我到目前爲止的代碼:

class PersonModel(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    firstName = models.CharField(max_length=50) 
    lastName = models.CharField(max_length=50) 
    company = models.ForeignKey(CompanyModel, on_delete=models.CASCADE, null=True) 
    phone = models.ForeignKey(PhoneModel, on_delete=models.CASCADE, null=True) 
    email = models.EmailField(blank=True) 

    def __str__(self): 
     return '%s %s - %s - %s, %s' % (self.firstName, self.lastName, 
             self.company, self.phone, self.email 
             ) 

    class Meta: 
     ordering = ['firstName'] 
     verbose_name = "Customer Contact Information" 
     #verbose_name_plural = "Contacts" 

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     PersonModel.objects.create(user=instance) 

@receiver(post_save, sender=User) 
def save_user_profile(sender, instance, **kwargs): 
    instance.profile.save() 

UPDATE(決賽): 隨着raratiru的幫助下,我已經能夠得到大部分他同去的腳本。由於我的外鍵要求,我仍然很難創建一個超級用戶。

from django.contrib.auth.models import (
    AbstractBaseUser, 
    PermissionsMixin, 
    BaseUserManager, 
) 
from django.core.mail import send_mail 
from django.db import models 
from django.utils.translation import ugettext_lazy as _ 
from customers import models as customers_models 

class TravelModel(models.Model): 
    mileageRate = models.DecimalField(max_digits=4, decimal_places=3) 

    def __str__(self): 
     return '%s' % (self.mileageRate) 

    class Meta: 
     verbose_name = "Current Federal Milage Rate" 
     #verbose_name_plural = "Milage" 


class UserManager(BaseUserManager): 
    def create_user(self, email, firstName, lastName, company, phone, password=None, **kwargs): 
     email = self.normalize_email(email) 
     user = self.model(email=email, **kwargs) 
     user.firstName = firstName 
     user.lastName = lastName 
     user.company = company 
     user.phone = phone 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, email, firstName, lastName, password=None, **kwargs): 
     #user = self.create_user(**kwargs) 
     email = self.normalize_email(email) 
     user = self.model(email=email, **kwargs) 
     user.firstName = firstName 
     user.lastName = lastName 
     user.set_password(password) 
     user.is_superuser = True 
     user.is_staff = True 
     user.save(using=self._db) 
     return user 


class AliasField(models.Field): 
    def contribute_to_class(self, cls, name, virtual_only=False): 
     super().contribute_to_class(cls, name, virtual_only=True) 
     setattr(cls, name, self) 

    def __get__(self, instance, instance_type=None): 
     return getattr(instance, self.db_column) 


class MyUser(AbstractBaseUser, PermissionsMixin): 
     firstName = models.CharField(max_length=50, blank=False, null=False) 
     lastName = models.CharField(max_length=50, blank=False, null=False) 
     company = models.ForeignKey(customers_models.CompanyModel, on_delete=models.PROTECT, null=False) 
     phone = models.ForeignKey(customers_models.PhoneModel, on_delete=models.PROTECT, null=False) 

     email = models.EmailField(_('email address'), max_length=255, unique=True) 

     is_staff = models.BooleanField(
      _('staff status'), 
      default=False, 
      help_text=_(
        'Designates whether the user can log into this admin ' 
        'site.' 
      ) 
    ) 
     is_active = models.BooleanField(
      _('active'), 
      default=True, 
      help_text=_(
        'Designates whether this user should be treated as ' 
        'active. Unselect this instead of deleting accounts.' 
      ) 
    ) 
     username = AliasField(db_column='email') 

     objects = UserManager() 

     USERNAME_FIELD = 'email' 
     REQUIRED_FIELDS = ['firstName','lastName',] 

     class Meta(object): 
      ordering = ['firstName'] 
      verbose_name = _('Contact') 
      verbose_name_plural = _('Contacts') 

     def __str__(self): 
      return '%s - %s %s - %s - %s' % (self.company, self.firstName, self.lastName, self.email, self.phone) 

     def get_full_name(self): 
      return self.email 

     def get_short_name(self): 
      return self.email 

     def email_user(self, subject, message, from_email=None, **kwargs): 
      """ 
      Sends an email to this User. 
      """ 
      send_mail(subject, message, from_email, [self.email], **kwargs) 

規避外鍵的鬥爭中,最簡單的方法是創建超級用戶之前刪除空=假需求 - 公司和電話後分配 - 並設置空回假之後。

沙发
0
1

這就是我擴展我的用戶模型的方法。以下代碼也將用戶名替換爲電子郵件字段。我發佈它是因爲它引起了核心變化,因此它清楚了背後的邏輯。

基本想法可以在this post找到並解釋。一個非常好的帖子也可以找到here

在這種情況下,AliasField會將字段username作爲email的別名。儘管django已經記錄了proper way找到用戶模型及其相關字段,但這並不是必需的。

from django.contrib.auth.models import (
    AbstractBaseUser, 
    PermissionsMixin, 
    BaseUserManager, 
) 
from django.core.mail import send_mail 
from django.db import models 
from django.utils.translation import ugettext_lazy as _ 


class UserManager(BaseUserManager): 
    def create_user(self, email, password=None, **kwargs): 
     email = self.normalize_email(email) 
     user = self.model(email=email, **kwargs) 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, **kwargs): 
     user = self.create_user(**kwargs) 
     user.is_superuser = True 
     user.is_staff = True 
     user.save(using=self._db) 
     return user 


class AliasField(models.Field): 
    def contribute_to_class(self, cls, name, private_only=False): 
     super().contribute_to_class(cls, name, private_only=True) 
     setattr(cls, name, self) 

    def __get__(self, instance, instance_type=None): 
     return getattr(instance, self.db_column) 


class MyUser(AbstractBaseUser, PermissionsMixin): 
    custom_field = models.ForeignKey(
     'app.Model', 
     on_delete=models.PROTECT, 
    ) 

    email = models.EmailField(_('email address'), max_length=255, unique=True) 

    is_staff = models.BooleanField(
     _('staff status'), 
     default=False, 
     help_text=_(
      'Designates whether the user can log into this admin ' 
      'site.' 
     ) 
    ) 
    is_active = models.BooleanField(
     _('active'), 
     default=True, 
     help_text=_(
      'Designates whether this user should be treated as ' 
      'active. Unselect this instead of deleting accounts.' 
     ) 
    ) 
    username = AliasField(db_column='email') 

    objects = UserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['user_branch_key', ] 

    class Meta(object): 
     ordering = ['email'] 
     verbose_name = _('My User') 
     verbose_name_plural = _('My User') 

    def __str__(self): 
     return 'id: {0} - {1}, {2}'.format(self.id, self.email, self.user_branch_key) 

    def get_full_name(self): 
     return self.email 

    def get_short_name(self): 
     return self.email 

    def email_user(self, subject, message, from_email=None, **kwargs): 
     """ 
     Sends an email to this User. 
     """ 
     send_mail(subject, message, from_email, [self.email], **kwargs) 

一旦將文件./the_user/models.py在名爲the_user延長您的用戶模型,例如應用程序中,你必須做出的settings.py文件中的一些變化:

  • 註冊在INSTALLED_APPS應用
  • ./manage.py makemigrations & & ./manage.py migrate
  • 設置AUTH_USER_MODEL = 'the_user.MyUserthe docs

這樣描述的,在另一個模型,你可以添加一個外鍵如下:

from the_user.models import MyUser 
from django.conf import settings 
from django.db import models 

class AModel(models.Model) 
    user = models.ForeignKey(
     settings.AUTH_USER_MODEL, 
     on_delete=models.PROTECT, 
     related_name='%(app_label)s_%(class)s_user' 
    ) 
+0

好像而不是擴展,你重寫Django的用戶模型。這是一個比這個問題上的Django文檔更詳細的地獄:( – Jaberwocky

+0

@Jaberwocky的確。我正在尋找代碼來進行核心更改(使用電子郵件而不是用戶名),上面說明了用戶模型背後的邏輯 – raratiru

+0

我很感謝你的貢獻,我覺得這個問題不能完全回答我的問題,如果是的話,你會如何配合外鍵關係給用戶? 更精細的是,如果我想存儲什麼我在'PersonModel'中,如何使用你的方法完成這項工作? – Jaberwocky

0
votes
answers
68 views
+10

通過Django中的標籤獲取相關對象

2

我的目標是在訪問單個產品頁面時在我的電子商務網站中構建「推薦產品」部分。通過Django中的標籤獲取相關對象

我有一個產品的sereis在管理員中有幾個用戶定義的標籤。標記系統是django-taggitmodelcluster的組合,詳見Wagtail-CMS docs

我試圖使它在訪問產品頁面時,Django會查看所有其他具有相同/相似標籤的產品,並根據相同標籤的數量在「推薦產品」部分中列出它們。根據their docsdjango-taggit文檔似乎在其API中使用get_related()函數解決了此需求。

我很努力地得到這個工作,但隨着我不斷遇到錯誤,最新的是Exception Type: KeyError at /categories/test-category/test-product/ Exception Value: (15,)。這裏是我到目前爲止的代碼:

class ProductTag(TaggedItemBase): 
    content_object = ParentalKey('Product', related_name='tagged_items') 

class Product(Page): 
    ... 

    tags = ClusterTaggableManager(through=ProductTag, blank=True) 

def get_context(self, request): 
    context = super(Product, self).get_context(request) 

    current_tags = self.tags 
    related_products = Product.objects.filter(current_tags.similar_objects()) 

    context['related_products'] = related_products 
    return context 

編輯 |全錯誤回溯如下:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/categories/test-category/test-product/ 

Django Version: 1.11.5 
Python Version: 3.5.2 
Installed Applications: 
['home', 
'search', 
'products', 
'wagtail.wagtailforms', 
'wagtail.wagtailredirects', 
'wagtail.wagtailembeds', 
'wagtail.wagtailsites', 
'wagtail.wagtailusers', 
'wagtail.wagtailsnippets', 
'wagtail.wagtaildocs', 
'wagtail.wagtailimages', 
'wagtail.wagtailsearch', 
'wagtail.wagtailadmin', 
'wagtail.wagtailcore', 
'modelcluster', 
'taggit', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware', 
'wagtail.wagtailcore.middleware.SiteMiddleware', 
'wagtail.wagtailredirects.middleware.RedirectMiddleware'] 



Traceback: 

File "C:Usersddl_9Envsfstvllibsite-packagesdjangocorehandlersexception.py" in inner 
    41.    response = get_response(request) 

File "C:Usersddl_9Envsfstvllibsite-packagesdjangocorehandlersase.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:Usersddl_9Envsfstvllibsite-packagesdjangocorehandlersase.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:Usersddl_9Envsfstvllibsite-packageswagtailwagtailcoreviews.py" in serve 
    26.  return page.serve(request, *args, **kwargs) 

File "C:Usersddl_9Envsfstvllibsite-packageswagtailwagtailcoremodels.py" in serve 
    773.    self.get_context(request, *args, **kwargs) 

File "C:Usersddl_9Desktopfstvlproductsmodels.py" in get_context 
    143.  related_products = current_tags.similar_objects() 

File "C:Usersddl_9Envsfstvllibsite-packages	aggitutils.py" in inner 
    146.   return func(self, *args, **kwargs) 

File "C:Usersddl_9Envsfstvllibsite-packages	aggitmanagers.py" in similar_objects 
    350.     tuple(result[k] for k in lookup_keys) 

Exception Type: KeyError at /categories/test-category/test-product/ 
Exception Value: (15,) 

如果我嘗試訪問其他產品頁面,我會得到相同的錯誤,只是使用不同的異常值。該函數期望從一個字典的關鍵,但由於某種原因,它被賦予的價值,而不是...這可能是與代碼兼容性問題?

+0

'related_products = current_tags.similar_objects()'不會返回你想要的'Product'對象列表嗎?通過'Product.objects.filter(...)'傳遞它似乎沒有任何目的(也不是'filter'方法的有效語法)。 – gasman

+0

這就是我在第一次嘗試時所嘗試的 - 仍然給了我同樣的錯誤:'異常類型:KeyError在/ categories/test-category/test-product /異常值:(15,)'和回溯到'元組(在lookup_keys中k的結果[k])'@gasman – DDiran

+0

請分享完整的回溯 - 單行代碼並不能真正告訴我任何事情。 – gasman

沙发
0
0

好吧,經過大量的研究和修補,我發現了一個解決方案,但是這個只適用於Django> = 1.9

Github用戶nickhudkins遇到同樣的問題,並編輯了similar_objects()函數來解決KeyError,詳見他的ticket

解決的辦法是進入taggit managers.py並按如下所示編輯函數(+表示添加行和 - 刪除它們)。

   objs = rel_model._default_manager.filter(**{ 
        "%s__in" % remote_field.field_name: [r["content_object"] for r in qs] 
       }) 
+   actual_remote_field_name = remote_field.field_name 
+   if VERSION > (1, 9): 
+    actual_remote_field_name = f.target_field.get_attname() 
+   else: 
+    actual_remote_field_name = f.related_field.get_attname() 
       for obj in objs: 
-    items[(getattr(obj, remote_field.field_name),)] = obj 
+    items[(getattr(obj, actual_remote_field_name),)] = obj 
      else: 
       preload = {} 
       for result in qs: 
板凳
0
0

如果你不想打補丁django-taggit,其他可能的解決方案是使用raw SQL查詢。類似於:

ArticlePage.objects.raw('select a.page_ptr_id, p.title, count(at.tag_id) as tag_count from article_articlepage a join wagtailcore_page p on a.page_ptr_id = p.id join article_articletag at on at.content_object_id = a.page_ptr_id join taggit_tag t on t.id = at.tag_id where tag_id in (1, 2, 3) group by (page_ptr_id, p.id) order by tag_count desc'); 

ArticlePage - 我的模型

ArticleTag - 對我的代碼(從TaggedItemBase iherited)M2M模型

wagtailcore_page - Taggit標籤 - 爲

taggit_tag頁基地鶺鴒表表

(1, 2, 3) - j ust示例標記ID

希望它有幫助!隨意適應您的需求。

0
votes
answers
61 views
+10

要使用重定向時使用Turbolinks 5 Django的,我怎麼能自動列入Turbolinks-Location頭的()?

2

按照Turbolinks 5文檔「以下的重定向」(https://github.com/turbolinks/turbolinks#following-redirects):要使用重定向時使用Turbolinks 5 Django的,我怎麼能自動列入Turbolinks-Location頭的()?

當您訪問的位置/one和服務器重定向到的位置 /two,你還指望瀏覽器的地址欄中顯示的重定向 網址。

但是,Turbolinks使用XMLHttpRequest發出請求,其中 透明地遵循重定向。有沒有辦法讓Turbolinks告訴 請求是否導致了重定向,而不從服務器的其他 合作。

而對於這個解決方案是:

響應發送Turbolinks-Location頭的訪問,這是 重定向,以及Turbolinks將取代瀏覽器的最頂端與你提供的價值的歷史 條目。

的Turbolinks Rails的引擎,與redirect_to幫手重定向非GET XHR請求自動執行此優化。

我在我的Django(1.11)的項目中使用Turbolinks了極大的興趣,我想知道如果任何人都可以在如何創建一個新的Django重定向()函數或修改現有的指向正確的方向我一個總是包含重定向所需的Turbolinks-Location頭部,以按預期方式工作。我絕對不希望每次執行重定向時手動設置此標頭。

有在類似的入口段(https://github.com/turbolinks/turbolinks#redirecting-after-a-form-submission)「重定向表單提交後,」我也想感謝所有幫助瞭解如何實現:

如果表單提交結果的狀態變化這 影響緩存的網頁服務器,考慮清除Turbolinks的緩存與 Turbolinks.clearCache()

Turbolinks Rails引擎針對非GET XHR請求自動執行此優化, 與redirect_to幫助器重定向。

我沒看到有一個「插入式turbolinks實施的Django」包在github上,但是這是從turbolinks經典分叉和源代碼也沒有提到Turbolinks-Location頭,所以我敢肯定這是不是我在找什麼。

沙发
0
0

我確實最終發現瞭如何通過reddit用戶指向這個項目中的一個代碼塊來嘗試我正在嘗試的內容。

我複製了TurbolinksMiddleware類到我自己的middleware.py我的應用程序目錄下,在我的settings.py將其列爲此類

# MIDDLEWARE CONFIGURATION 
# -------------------------------------------------------------------------- 
MIDDLEWARE = [ 
    . 
    . 
    . 
    'apps.middleware.TurbolinksMiddleware', 
] 

隨着包括在我的HTML的turbolinks.js的常規安裝步驟模板,一切似乎都正常工作。

這裏是萬一TurbolinksMiddleware類它不應該是可以在上面的鏈接:

class TurbolinksMiddleware(object): 
    """ 
    Send the `Turbolinks-Location` header in response to a visit that was redirected, 
    and Turbolinks will replace the browser’s topmost history entry . 
    """ 

    def __init__(self, get_response): 
     self.get_response = get_response 

    def __call__(self, request): 
     response = self.get_response(request) 

     is_turbolinks = request.META.get('HTTP_TURBOLINKS_REFERRER') 
     is_response_redirect = response.has_header('Location') 

     if is_turbolinks: 
      if is_response_redirect: 
       location = response['Location'] 
       prev_location = request.session.pop('_turbolinks_redirect_to', None) 
       if prev_location is not None: 
        # relative subsequent redirect 
        if location.startswith('.'): 
         location = prev_location.split('?')[0] + location 
       request.session['_turbolinks_redirect_to'] = location 
      else: 
       if request.session.get('_turbolinks_redirect_to'): 
        location = request.session.pop('_turbolinks_redirect_to') 
        response['Turbolinks-Location'] = location 
     return response 
板凳
0
0

你提到Django的封裝實現了middleware是負責添加標題。看起來,舊的turbolinks標題有不同的名稱。您可以編寫自己的中間件來支持turbolinks 5.

而不是正常提交??表單,使用XHR提交它們。

您可以用普通的Django實現這一目標。閱讀django CSRF doc - 他們詳細解釋什麼是必要的。

0
votes
answers
60 views
+10

編輯管理面板中的用戶密碼

0

我已經覆蓋「save_model」方法來管理我的管理員面板應用程序中的用戶密碼。我要的是:編輯管理面板中的用戶密碼

  • 創建一個新的隨機密碼,當我創建新用戶(如果密碼字段爲空)
  • 加密密碼(如果我將它設置)
  • 使用用戶的密碼(如果我改變用戶但未設置密碼)

如何定義最後的條件?

def save_model(self, request, obj, form, change): 
    if not change and (not form.cleaned_data['password']) : 
     password = User.objects.make_random_password() 
     obj.set_password(password) 
    elif form.cleaned_data['password'] : 
     obj.set_password(form.cleaned_data['password']) 
    else 
     ? 
    super(UserAdmin, self).save_model(request, obj, form, change) 
沙发
0
0

你正在做這一切有點太晚了。用戶創建表單甚至不允許您發佈沒有填寫字段password1password2的表單。如果這些字段爲空,您將永遠不會使用UserAdmin.save_model()方法。

但是,您可以覆蓋用戶創建表格的save()方法,其中允許密碼字段爲空,並且如果字段爲空(或使用用戶密碼(如果已輸入)),則設置隨機密碼。

作爲獎勵,如果用戶輸入密碼(密碼不匹配)以及檢查AUTH_PASSWORD_VALIDATORS(除了'django.contrib.auth.password_validation.MinimumLengthValidator',因爲空密碼字段意味着0個字符),此代碼將保持表單驗證狀態。

### admin.py 

from django import forms 
from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User 


class CustomUserCreationForm(UserCreationForm): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.fields['password1'].required = False 
     self.fields['password2'].required = False 

    def _clean_form(self): 
     super()._clean_form() 

     password1 = self.cleaned_data.get("password1") 
     password2 = self.cleaned_data.get("password2") 

     if password1 != password2: 
      self.add_error('password2', self.error_messages['password_mismatch']) 

    def save(self, commit=True): 
     user = super().save(commit=False) 

     user_password = self.cleaned_data["password1"] 

     if not user_password: 
      user_password = User.objects.make_random_password() 

     user.set_password(user_password) 

     if commit: 
      user.save() 
     return user 


class CustomUserAdmin(UserAdmin): 
    add_form = CustomUserCreationForm 


# Re-register UserAdmin 
admin.site.unregister(User) 
admin.site.register(User, CustomUserAdmin) 
0
votes
answers
33 views
+10

如何在視圖Django的

0

的文件比較同型號的其他領域只得到一個領域我想運行此查詢:如何在視圖Django的

"SELECT pname FROM PaientSignup WHERE email=p_email" 

我使用的過濾器的方法,讓我給電子郵件相匹配的所有其他數據。

p= PatientSignup.objects.filter(email=p_email) 

從那個輸出我無法取得病人的名字。

  • models.py

    class PatientSignup(models.Model): 
        pid = models.AutoField(verbose_name='Patient Id', primary_key=True, auto_created=True) 
        pname = models.CharField(verbose_name='Enter Name', max_length=50, default=NameError) 
        email = models.CharField(verbose_name='Enter Email', max_length=100,unique=True) 
        age = models.PositiveIntegerField(verbose_name='Enter age',default=5, null=True) 
        password = models.CharField(verbose_name='Enter Password',max_length=12) 
    
  • views.py

    def pFeedback(request): 
        #feedback = textarea input 
        p_email = request.session['pusername'] 
        #here, I want only patient name->pname to store in database 
        saveFeedback = patientFeedback() 
        saveFeedback.feedback = feedback 
        saveFeedback.patientName = patient 
        saveFeedback.save() 
    
沙发
0
1

嘗試PatientSignup.objects.filter(email=p_email).values_list('pname', flat=True)。它將返回與電子郵件相匹配的名稱列表。

+0

它的工作原理!謝謝!! –

+0

它返回queryset。所以採取名稱,我必須運行循環查詢集對象? –

+0

values_list()返回一個列表。所以採取名字只是迭代列表。 – Shailendra

0
votes
answers
47 views
+10

Aldryn文章元選項沒有出現在網頁頁面源

0

我使用Aldryn Newsblog進行文章管理,該網站是在Django CMS上構建的網站上。Aldryn文章元選項沒有出現在網頁頁面源

Aldryn允許我們爲每篇文章添加元選項,請參閱picture

我的輸入爲元標題元描述未顯示在網頁頁面源中。

想請求幫助,請謝謝。

沙发
0
0

你在base.html<head>...</head>裏面有這些行嗎?

{% page_attribute "page_title" as title %} 
<title>{{ title }}</title> 

<meta name="description" content="{% page_attribute "meta_description" %}"> 
+0

由於馬塞洛。是的,我確實有兩段代碼。元信息目前反映了我的aldryn新聞博客部分的設置(下面附有一個鏈接來描述什麼是部分)。我希望元信息可以反映爲文章設置的內容。 http://aldryn-newsblog.readthedocs.io/en/latest/how-to/apphook_configurations.html – vsg

0
votes
answers
29 views
+10

如何使Django服務器可移植?

0

我的web服務器依賴於nginx,django和很多python依賴項。我想知道是否有辦法創建一個可以在新服務器上運行的便攜式圖像/腳本,並快速啓動並運行它。 Docker與此有關嗎?如何使Django服務器可移植?

+0

爲什麼不使用git –

+0

Docker與此絕對相關,但超出了SO回答的範圍 - 請參閱[本指南](http://ruddra.com/2016/08/14/docker-django -nginx-postgres /) –

+0

你可以使用git + ansible組合 – Vaibhav

沙发
0
-1

你應該總是使用git來管理你的代碼。使用git,你可以快速地在另一臺服務器上獲得你的django項目。但就是這樣。

此外,你必須遷移你的數據庫。每個數據庫引擎都有轉儲選項。

不要忘記移動你的靜態資產。可能你已經把他們全部放在一個目錄中。

你的nginx,數據庫安裝和配置怎麼樣?這裏是相關的Docker。

所有這些,你應該成功遷移。

0
votes
answers
26 views
+10

Django - 保存之前檢查其他對象

0

我想覆蓋內置的django .save()方法來對數據庫中的所有其他對象執行檢查。Django - 保存之前檢查其他對象

For example: 

class User(models.Model): 
    name = models.CharField(max_length=120) 

class Admin(models.Model): 
    name = models.CharField(max_length=120) 

class SecurityGroup(models.Model): 
    name = models.CharField(max_length=120) 
    users = models.ManytoManyField(User) 
    admins = models.ManytoManyField(Admin) 

    def save(self, *args, **kwargs): 

     # check admins don't exist in any other SecurityGroup prior to save 

     super(SecurityGroup, self).save(*args, **kwargs) # Call the "real" save() method. 

documentation例子是相當簡單的,沒有描述這種類型的預存檢查。

我已經嘗試添加的行.save()如:

`self.objects.filter(admins__name=self.admins.name).count()` 

調用其他SecurityGroup對象,但我收到的錯誤:

`Manager is not accessible via SecurityGroup instance` 

是否有可能實現這一保存功能內部到SecurityGroup模型,還是我需要創建一個form和使用SecurityGroup.save(commit=False)這種類型的預保存檢查?

感謝您的幫助。

+0

您在通話有錯誤'超'將其更改爲'SecurityGroup',如果你想保存新的實例之前檢查,你可以檢查'self.pk'是否存在 –

+0

謝謝,我修復了錯誤。你有更完整的答案來提供嗎? – NickBraunagel

+0

請閱讀完整評論 –

沙发
0
0

這工作對我來說是覆蓋模式的formadmin.py解決方案。這使得能夠簡單檢查管理員是否已經存在於SecurityGroup中。

from django.contrib import admin 
from django.forms import ModelForm 

from security.models import SecurityGroup 


class SecurityGroupAdminForm(ModelForm): 

    class Meta: 
     model = SecurityGroup 
     fields = '__all__' 

    def clean(self):  
     # CHECK 1 
     if admins: 
      admins = self.cleaned_data['admins'] 

     for a in admins: 
      existing_group = SecurityGroup.objects.filter(users__username=a.username) 

      if existing_group: 
       raise Exception("message") 



     return self.cleaned_data 

然後,同樣admin.py文件中,表明自定義窗體作爲關注模型的管理註冊的一部分(在這種情況下,SecurityGroup):

class UserSecurityGroupAdmin(admin.ModelAdmin): 

    # class Meta: 
    model = UserSecurityGroup 
    form = UserSecurityGroupAdminForm 

admin.site.register(UserSecurityGroup, UserSecurityGroupAdmin) 
板凳
0
-1

該錯誤是由通過模型實例訪問模型的管理器造成的。你應該使用

self.model_class().objects 
+0

在研究這個問題時,必須通過django ContentType類(而不是通過Model類實例)訪問實例的模型類:https://docs.djangoproject.com/en /1.11/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentType.model_class。使用你描述的方法返回一個AttributeError。 – NickBraunagel

0
votes
answers
52 views
+10

Django的REST框架相同的路線,不同的

0

我使用Django的REST框架構建的API,這裏是我的問題Django的REST框架相同的路線,不同的

url(r'^profiles/(?P<pk>[0-9]*)', ProfileRetrieveView.as_view(), name='profiles-detail'), 
url(r'^profiles/(?P<pk>[0-9]*)', ProfileUpdateView.as_view(), name='profiles-update'), 

class ProfileRetrieveView(RetrieveAPIView): 

    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 

class ProfileUpdateView(UpdateAPIView): 

    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 
    permission_classes = (IsAuthenticated,) 

當我查詢的API與鏈接/資料/ 2和方法補丁,我收到405,方法不允許,只允許get方法,我怎麼能解決這個問題,沒有避風港把我的兩個視圖類轉換成類與GenericView基類和Retrive +更新Mixins。

+0

這是URL匹配是如何工作的?它的股價下跌l ist並選擇匹配的第一個。正確的做法是讓一個類處理它。但在路由器配置中,如果我記得正確,可以將不同的方法路由到不同的類,但是您需要URL匹配一次。 – bryan60

沙发
0
0

您應該將其壓縮爲單個端點。你可以讓一個類處理所有的列表,更新,獲取等等。嘗試...像這樣:

from rest_framework import mixins, viewsets 
class ProfileUpdateView(viewset.ModelViewSet, 
         mixins.ListModelMixin, 
         mixins.UpdateModelMixin): 

    serializer_class = ProfileSerializer 
    permission_classes = (IsAuthenticated,) 

    get_queryset(self): 
      return Profile.objects.all() 

如果你使用純模型,使用內置模型的東西,並檢查混合。它將爲您節省通用代碼編寫的噸。它有一些知道如何將請求路由到匹配的http方法的魔法。

http://www.django-rest-framework.org/api-guide/generic-views/#mixins

板凳
0
0

Django的REST框架提供了通用視圖,你不需要混入。 您可以直接使用RetrieveUpdateAPIView。提供請求方法get檢索數據,put更新數據和patch進行部分更新。

from rest_framework.generics import RetrieveUpdateAPIView 

class ProfileUpdateView(RetrieveUpdateAPIView): 
    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 
    permission_classes = (IsAuthenticated,) 

參考:http://www.django-rest-framework.org/api-guide/generic-views/#retrieveupdateapiview

地板
0
1

urls.py

url(r'^profiles/(?P<pk>[0-9]*)', ProfileRetrieveUpdateView.as_view(), name='profiles-detail-update'), 

views.py

from rest_framework.generics import RetrieveUpdateAPIView 

class ProfileRetrieveUpdateView(RetrieveUpdateAPIView): 

    queryset = Profile.objects.all() 
    serializer_class = ProfileSerializer 

    def get_permissions(self): 
     if self.request.method == "GET": 
      return [] 
     else: 
      return [IsAuthenticated()]