объект 'services' не повторяется Django - PullRequest
0 голосов
/ 01 сентября 2018

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

Это мой взгляд

def service(request,emp_id):
  u = User.objects.get(sys_id = emp_id)
  s = services.objects.get(email = emp_id)
  if request.method == 'POST':
      user_form = ServiceForm(data=request.POST)
      if user_form.is_valid():
          user_form.save()
      else:
          print(user_form.errors)
  else:
      user_form = ServiceForm()
  return render(request, 'service.html', {
      'user_form':user_form,'u':u,'s':s})

Это моя модель

class User(AbstractBaseUser):
  sys_id = models.AutoField(primary_key=True, blank=True)
  email = models.EmailField(
      verbose_name='email address',
      max_length=255,
      unique=True,
  )
  first_name = models.CharField(max_length=50,blank=True,null=True)
  last_name = models.CharField(max_length=50,blank=True,null=True)
  address = models.TextField(max_length=300,blank=True,null=True)
  DOB = models.DateField('Date of Birth', blank=True, null=True)
  DOJ = models.DateTimeField(auto_now=True)
  active = models.BooleanField(default=True)
  staff = models.BooleanField(default=False)
  admin = models.BooleanField(default=False)
class services(models.Model):
  taskid = models.AutoField(primary_key=True, blank=True)
  client = models.CharField(max_length=50,blank=True,null=True)
  project = models.CharField(max_length=50,blank=True,null=True)
  taskTime = models.DateField('Task Date', blank=True, null=True)
  hours = models.TimeField(blank=True, null=True)
  minutes = models.TimeField(blank=True, null=True)
  Description = models.TextField(max_length=300,blank=True,null=True)
  email = models.ForeignKey(User, unique=False, on_delete=models.CASCADE)

Это мой HTML

{% for service in s %}  
<tr>  
    <td>{{ service.client }}</td>  
    <td>{{ service.project }}</td>  
    <td>{{ service.taskTime }}</td>  
    <td>{{ service.address }}</td>
    <td>{{ service.hours }}</td>
    <td>{{ service.minutes }}</td>
    <td>{{ service.Description }}</td>    
</tr>  
{% endfor %}

Я хотел бы отображать только те данные, которые принадлежат конкретному пользователю, когда пользователь вошел в систему, он должен видеть только свои услуги. Таблица содержит сведения обо всех пользователях с несколькими строками. поэтому я хотел бы отображать только данные одного пользователя с несколькими строками.

1 Ответ

0 голосов
/ 01 сентября 2018

В представлении мы видим:

def service(request,emp_id):
  u = User.objects.get(sys_id = emp_id)
  <b>s = services.objects.get(email = emp_id)</b>
  if request.method == 'POST':
      user_form = ServiceForm(data=request.POST)
      if user_form.is_valid():
          user_form.save()
      else:
          print(user_form.errors)
  else:
      user_form = ServiceForm()
  return render(request, 'service.html', {
      'user_form':user_form,'u':u,'s':s})

Таким образом, вы .get(..) a Service это означает, что s является Service объектом, не a коллекцией из Service объектов (т.е. QuerySet *). Поэтому вы можете не итерировать по нему.

Визуализация одиночного Service объекта

Вы, вероятно, хотите только предоставить сервис s, поэтому вы можете заменить шаблон на:

<tr>  
    <td>{{ <b>s</b>.client }}</td>  
    <td>{{ <b>s</b>.project }}</td>  
    <td>{{ <b>s</b>.taskTime }}</td>  
    <td>{{ <b>s</b>.address }}</td>
    <td>{{ <b>s</b>.hours }}</td>
    <td>{{ <b>s</b>.minutes }}</td>
    <td>{{ <b>s</b>.Description }}</td>    
</tr>

Отображение коллекции из Service объектов

Если email из Service не является уникальным, вы, вероятно, захотите извлечь все Service объектов, тогда вам следует использовать .filter(..) вместо .get(..):

def service(request,emp_id):
  u = User.objects.get(sys_id = emp_id)
  <b>s = services.objects.filter(email = emp_id)</b>
  if request.method == 'POST':
      user_form = ServiceForm(data=request.POST)
      if user_form.is_valid():
          user_form.save()
      else:
          print(user_form.errors)
  else:
      user_form = ServiceForm()
  return render(request, 'service.html', {
      'user_form':user_form,'u':u,'s':s})

В этом случае в шаблоне вам действительно нужно перебрать service s в s с {% for service in s %}.

Примечание : возможно, было бы лучше использовать более описательные имена, такие как services вместо s, поскольку сейчас шаблон немного "загадочный".

...