我想使用外键更新不同模型中的布尔字段

2024-03-28 19:17:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单元模型和一个租户模型。 `

class Unit(models.Model):
   property_name = models.ForeignKey('Property', on_delete=models.CASCADE)
   unit_name = models.CharField(max_length=300)
   floor = models.IntegerField()
   unit_type = models.CharField(max_length=300)
   rent_value = models.IntegerField()
   occupied = models.BooleanField(default=False)

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

class Tenant(models.Model):

   property_occupied = models.ForeignKey('Property', blank=True, default=None, on_delete=models.CASCADE)
   unit_occupied = models.OneToOneField('Unit', unique=True, on_delete=models.CASCADE, related_name='tenant')
   first_name = models.CharField(max_length=300)
   last_name = models.CharField(max_length=300)
   id_number = models.IntegerField(unique=True)
   phone_number = models.IntegerField(unique=True)
   date_occupied = models.DateField(auto_now_add=True)

   def __str__(self):
       return '%s, %s, %s' %  (self.unit_occupied, self.first_name, self.last_name)` 

每当我添加租户时,我想将unit.occulated字段更新为true;每当我删除租户时,我想将其更新为false。我想自动执行此操作。我在租户模型上使用onetoone字段将一个单元分配给租户,因为一个单元只能有一个租户

我使用租户表单添加租户,使用单元表单添加单元。在添加/删除租户时,如何更新我要自动添加的租户的特定单位占用字段

这是my views.py: `

def add_tenant(request):
form = AddTenantForm

if request.method == 'POST':
    form = AddTenantForm(request.POST)

    if form.is_valid():
        form.save(commit=True)

        messages.success(request, 'Tenant added successfully')
    
    # units = Tenant._meta.get_field('unit_occupied').remote_field.model
    # for unit in units:
    #     ou = unit
    #     if ou.occupied is False:
    #         ou.occupied == True
    #         ou.occupied.save(commit=True)
    
    return redirect('tenants')

    # else:
    #     messages.error(request, 'Unit is already occupied')


else:
    form = AddTenantForm

context = {'form': form}
return render(request, 'property/add_tenant.html', context)`

1条回答
网友
1楼 · 发布于 2024-03-28 19:17:14

我想出来了 我从租户提交表单中获取了单元,并使用id更新单元模型中的特定单元

def add_tenant(request):
  form = AddTenantForm

  if request.method == 'POST':
    form = AddTenantForm(request.POST)

    if form.is_valid():

        unit_occupied = form.cleaned_data.get('unit_occupied')
        print(unit_occupied)

        form.save(commit=True)

        ou = Unit.objects.get(id=unit_occupied.id)
        if ou.occupied is False:
            ou.occupied = True
            ou.save()

        messages.success(request, 'Tenant added successfully')
        
        return redirect('tenants')

    else:
        messages.error(request, 'Unit is already occupied')

相关问题 更多 >