Товарищи, подскажите возможно ли и как передать переменную из другого приложения через URL в view?
Покажу на примере, что хочется:
Django 1.11.3
<p>APP_config/models.py</p>
<pre><code> class DirectoryBase(models.Model):
class Meta:
abstract = True
comment = models.CharField(max_length=100, blank=True, db_column="comment", verbose_name="Comment")
is_active = models.BooleanField(default=True, db_column="is_active", verbose_name="Is active")
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
class Employee(DirectoryBase):
"""Имя сотрудника, например Хулев И.И."""
employee = models.CharField(max_length=50, unique=True, db_column="employee", verbose_name="Employee")
class Meta():
db_table = 'Employee'
ordering = ['employee']
verbose_name = 'Employee'
verbose_name_plural = 'Employees'
def __str__(self):
return "%s" % self.employee
class Line(DirectoryBase):
"""Производственная линия"""
line = models.CharField(max_length=50, unique=True, db_column="line", verbose_name="Line")
class Meta():
db_table = 'Line'
ordering = ['line']
verbose_name = 'Line'
verbose_name_plural = 'Lines'
def __str__(self):
return "%s" % self.line
</code></pre>
<p>APP_department/models.py</p>
<pre><code>class DeptBase(models.Model):
"""Абстрактная модель для производственных участков"""
class Meta:
abstract = True
comment = models.CharField(max_length=100, blank=True, db_column="comment", verbose_name="Comment")
is_active = models.BooleanField(default=True, db_column="is_active", verbose_name="Is active")
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
class CoolingDept(DeptBase):
"""Coolling department"""
line = models.OneToOneField("APP_config.Line")
foreman_name = models.ForeignKey("APP_config.Employee", related_name="foreman_name")
soldering_comp_name = models.ForeignKey("APP_config.Employee", related_name="soldering_comp_name")
class Meta():
db_table = 'CoolingDept'
ordering = ['line']
verbose_name = 'CoolingDept'
verbose_name_plural = 'CoolingDepts'
def __str__(self):
return "%s" % self.line
</code></pre>
<p>APP_zebra_print/models.py</p>
<pre><code>class Barcode(models.Model):
"""Печать штрихкодов"""
barcode = models.CharField(max_length=100, db_column="barcode", verbose_name="Barcode")
created = models.DateTimeField(auto_now_add=True, auto_now=False)
class Meta():
db_table = 'Barcode'
ordering = ['created']
verbose_name = 'Barcode'
verbose_name_plural = 'Barcodes'
def __str__(self):
return "%s" % self.barcode
</code></pre>
<p>APP_zebra_print/urls.py</p>
<pre><code>from django.conf.urls import url
from . import views
from .views import barcode_add_coolingdept1
urlpatterns = [
url(r'^zebra_print/barcode_add/coolingdept/1/$', views.barcode_add_coolingdept1,
name='barcode_add_coolingdept1'),
# url(r'^zebra_print/barcode_add/coolingdept/(?P<line_id>\d+)/$', views.barcode_add_coolingdept1,
# name='barcode_add_coolingdept1'),
]
</code></pre>
<p>APP_zebra_print/views.py</p>
<pre><code>from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from APP_department.models import CoolingDept
from .forms import BarcodeCoolingDept1Form
from datetime import datetime
def barcode_add_coolingdept1(request, error_barcode=""):
def barcode_add_coolingdept1(request, line_id, error_barcode=""):
"""Добавляем новый штрихкод. Результат ошибки error_barcode будет использоваться в шаблоне"""
if request.method != 'POST':
# Данные не отправлялись; создается пустая форма.
form_barcode = BarcodeCoolingDept1Form()
print("GET")
else:
print("POST")
# Отправлены данные POST; обработать данные.
form_barcode = BarcodeCoolingDept1Form(request.POST)
print("request")
print(request.POST)
if form_barcode.is_valid():
print("is_valid")
form_barcode = form_barcode.save(commit=False)
line_id = 2
coolingdept = CoolingDept.objects.get(id=line_id)
line = coolingdept.line
foreman_name = coolingdept.foreman_name
soldering_comp_name = coolingdept.soldering_comp_name
date_time = datetime.strftime(datetime.now(), "%Y.%m.%d %H:%M:%S")
print(line)
print(foreman_name)
print(soldering_comp_name)
print(date_time)
form_barcode.save()
print("save")
print(form_barcode)
# Мы используем вызов reverse() для получения URL-адреса страницы topics и передаем его
# функции HttpResponseRedirect(), перенаправляющей браузер пользователя на страницу topics.
# На этой странице пользователь видит только что введенную им тему в общем списке тем.
return HttpResponseRedirect(reverse('APP_zebra_print:barcode_add_coolingdept1'))
context = {'form': form_barcode, 'error_barcode': error_barcode}
return render(request, 'APP_zebra_print/barcode_add.html', context)
</code></pre>
Хочется передавать переменную line_id (APP_department.CoolingDept) через
<code>url(r'^zebra_print/barcode_add/coolingdept/(?P<line_id>\d+)/$', views.barcode_add_coolingdept1, name='barcode_add_coolingdept1'),
</code>
и получить ее в
<code>#def barcode_add_coolingdept1(request, line_id, error_barcode="")</code>
Updated 6 Dec. 2017, 15:13 by dfhgtrr.