当前位置: 首页 > 网络应用技术

如何编写Django的模型模块(2023年最新共享)

时间:2023-03-07 12:03:36 网络应用技术

  简介:今天,首席CTO Note将与您分享如何编写有关Django的模型模块。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!

  通过django构建的模型将爬网剧本中的数据爬行保存到数据库中

  修改后的文件(生成了Pycharm新Django项目的其余部分,而不是修改):

  

  def __str __(self):返回self.title Pass

  #testapp/spider.pyimport osimport sysimport django pathname = os.path.dirname(os.path.abspath(__file __))sys.path.insert.insert(0,pathnses)p =问题(title =“ [#0#]),作者=“ hi”)p.save()通行证

  #testProject/setting.py ...... installed_apps = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.contrib.sessors.contrib.messages'contrib.messages'','django.contrib.staticfiles',#添加应用程序'testapp',] ......

  #testapp/admin.py注册django.contrib Imporib导入管理员#在此处注册您的模型。从Testapp.Models导入QualiseAdminer(问题)

  我没有使用过djongo,但我认为应该几乎相同。这种类型的过滤器或方法返回查询对象,因此应通过过滤器连续使用。

  例如,您写了a = search.objects.filter(xxx),然后要添加另一个条件以继续A.Filter(YY)。

  1.这是不可能的。请看一下此ModelChoiceField的原理:

  尝试:

  key = seld.to_field_name或'pk'

  value = self.queryset.get(** {key:value})

  除了self.queryset.model.doesnotexist:

  提高价值Error(self.error_messages ['invalid_choice'])

  返回值

  您不能在Will.Chope Field和自定义处理数据上添加它。

  类Testform(forms.form):

  mychoicefield = forms.choicefield(选择= qs_choices)

  def __init __(self, *args,** kwargs):

  super(testform,self).__ init __(*args,** kwargs)

  self.fields ['mychoicefield']。选择=

  列表(self.fields ['mychoicefield']。选择) + [('新东西','new')]]]]

  def clean_mychoicefield(自我):

  data = self.clenet_data.get('mychoicefield')

  如果QS_CHOICES中的数据:

  尝试:

  data = mymodel.objects.get(id = data)

  除了mymodel.doesnotexist:

  提高表格。ValidationError('foo')

  返回数据

  2.看来您只想使这些表字段可选。不要让艰难的自我。请参阅标志着形式域的相关法规。

  leds = forms.modelchoicefield(querySet = peical.objects.filter(poc__in =('lead','sr. -lead')),必需= false)

  3.您是否有PK人对象,不,我认为您应该

  self.fields ['lead'] = forms.modelchoicefield(querySet = pepole.objects.filter(poc_ein =('thad','sr.lead')),empty_label =“ none”)

  self.fields ['lead2'] = forms.modelchoicefield(querySet = pepole.objects.filter(root__in =('lead','sr.lead')),empty_label =“ none”)

  编辑:由于您有一个ModelChoiceField,我认为所有选择都将是模型或未选择。通过修改传递给建设性函数的ModleChoiceField,您可以“展开”此类选择:querySet:您可以“展开”此类型:

  qs = peple.objects.filter(poc__in =('lead','sr. -lead'))

  ext = people.objects.filter(角色__in =('lead','sr. -lead'))

  QS = QS |分机

  self.fields ['lead'] = forms.modelchoicefield(querySet = qs,empty_label ='none')

  或用于更新

  self.fields ['lead']。querySet = qs

  模型是数据库设置。查看您需要存储这些数据,设置这些表,然后添加相应的字段

  #在这里创建您的模型。

  类用户(型号。模型):

  用户名= models.charfield(max_length = 20,默认='')#name属性,字段

  密码= models.charfield(max_length = 50,默认值='')#password属性,字段

  #该方法可以在打印对象时打印字符串,类似于Java中的ToString()方法

  def __str __(self):

  返回self.username+self.password

  在Internet上看到使用Django的模型和MAKEMIGRATION,迁移命令创建新表并使用它。但是我的数据已经存在,并且已经存储了,并且已经存储了数据,并且无法创建新表格。Django的指示和与模型名称的映射关系可以使Django使用现有表。

  如果模型在Django中存在如下:

  [python]查看普通副本

  来自django.db导入模型

  #在这里创建您的模型。

  Sciencenews(Models.Model):

  id = models.charfield(max_length = 36,primary_key = true)

  first_module = model.charfield(max_length = 30,默认值=“ news”)

  second_module = model.charfield(max_length = 30,默认值=“最新新闻”)

  title = models.charfield(max_length = 300)

  作者= models.charfield(max_length = 60,null = true)

  publish_date = models.charfield(max_length = 35,null = true)

  content = model.textfield(null = true)

  crawl_date = model.charfield(max_length = 35,null = true)

  from_url = models.charfield(max_length = 350,null = true)

  执行数据迁移命令:

  [python]查看普通副本

  python manage.py makemign

  python manage.py迁移

  名为show_sciencenews的数据表将在数据库中生成。显示为应用程序名称。我的应用程序名称在此处显示。

  我的存储和攀登数据数据的表名是Science_News,我想使用它来使用它而不是创建新表。其名称的名称已更改为带有表格的模型的名称,在这里我更改为show_sciencenews。然后使用上述数据迁移命令。目前,可以提示数据表数据表已经存在错误。不合理的模型已使用数据表映射。接下来,您只需要正常使用模型和数据表即可。

  Django模型对快速方法使用多语言支持。此方法通过创建自定义模板标签来实现多语言显示的目的来选择模型中的重复语言字段。

  假设我们有这样的模型。PY,并且某个模型包含多个重复字段。每个重复字段都用于保留其相应的显示语言:

  类myobject(models.model):

  name = models.charfield(max_length = 50)

  title_en = models.charfield(max_length = 50)

  title_es = models.charfield(max_length = 100)

  title_fr = models.charfield(max_length = 100)

  description_en = models.charfield(max_length = 100)

  description_es = models.charfield(max_length = 100)

  Description_fr = Models.Charfield(max_length = 100)

  类myotherobject(models.model):

  name = models.charfield(max_length = 50)

  content_en = models.charfield(max_length = 200)

  content_es = model.charfield(max_length = 200)

  content_fr = model.charfield(max_length = 200)

  请注意,我们将线条和语言代码作为相应字段背后的后缀,将用作语言搜索标记。

  然后,我们添加了一个需要在settings.py中翻译的字段名称:

  translation_fields =('title','description','content')

  将TemplateTags目录添加到项目目录(不要忘记任何家庭__init__.py),并构建lazy_tags.py:

  从django导入模板

  从设置导入translation_fields

  寄存器= template.library()

  类局部content(template.node):

  def __init __(self,model,landaging_code):

  self.model =模型

  self.lang = language_code

  def渲染(自我,上下文):

  模型= template.Resolve_variable(self.model,context)

  lang = template.resolve_variable(self.lang,context)

  对于translation_fields中的f:

  尝试:

  setAttr(型号,F,getAttr(型号,'%s_%s'%(f,lang)))

  除了attributeError:

  经过

  返回 '??'

  @register.tag(name ='get_localized_content')

  def get_lot_localized_content(解析器,令牌):

  bits = list(token.split_contents())

  如果Len(位)!= 3:

  rish template.templatesyntaxerror(“'get_localized_content'标签完全取2个参数”)

  返回局部content(model = bits [1],language_code = bits [2])

  为了在模板中使用自定义标签,我们首先加载:

  {%加载lazy_tags%}

  然后使用自定义标签,传递对象和语言代码,然后进行翻译。例如,西班牙语:

  {%get_localized_content对象'es'%}

  目前,如果没有语言代码可以通过,则不能使用obj.descript来调用某个语言字段。因此,我们与django.core.context_processors.request合作,上下文处理器::

  template_context_processors =(

  Em

  'django.core.context_processors.request',

  治愈

  我们可以在模板中使用它:

  {%get_localized_content oppect.language_code%}

  结论:以上是首席CTO注释为每个人编写的模型模块相关内容的相关内容摘要,我希望它对您有所帮助!如果您解决问题,请与更多的朋友分享关心这个问题?